【问题标题】:Rails 5 ignoring /lib class?Rails 5 忽略 /lib 类?
【发布时间】:2016-07-25 21:03:02
【问题描述】:

我使用this method 来表示rails 中的模态。它工作得非常好,但我刚刚升级到 Rails 5 beta3,现在它不能在生产环境中工作。

我收到此错误:

Completed 500 Internal Server Error in 22ms (ActiveRecord: 0.9ms)

NameError (uninitialized constant ApplicationController::ModalResponder):

app/controllers/application_controller.rb:26:in `respond_modal_with'
app/controllers/tools_controller.rb:28:in `new'

Rails 5 是否抛弃了我的继承?

我的class ModalResponder < ActionController::Responder/lib 中,正在开发中...

寻找有关 rails 5 更改的信息,但来源仅限于我的知识。

【问题讨论】:

  • 这似乎是 Rails 5.0.0 中的一个错误。它在退出测试版后也存在。对我来说,它只发生在生产中,而不是在开发中。

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

它说它找不到从 Rails 4.2 移出到单独 gem 中的 ApplicationController::Responder

gem 'responders' 添加到您的 Gemfile 中

lib 中的类不会自动加载,您必须要求它们

【讨论】:

  • 如果你能提供为什么 lib 没有自动加载的原因,我可以选择这个作为答案。这个答案不够详细,值得一试。
【解决方案2】:

您需要在 lib 文件夹中为您的类添加一个“require”(在 application.rb 上)。

喜欢:

需要'./lib/someclass'

我建议你将它放在 Rails 插件中。

【讨论】:

  • 您能描述一下使其成为插件的最佳过程吗?我将 lib 文件移动到我的 /app 目录,以便将其包含在内,但这可能不是最好的?
  • 当然!您可以阅读更多关于 Rails 插件的信息 here。最好全部测试,您可以在插件中添加加载文件设置。只需创建一个插件并将您的 lib 文件夹移到其中,我建议创建一个文件 'Foo' 来添加需求。在您的 application.rb 项目中,只需添加 require 'foo'。对不起我的英语哈哈。
  • @Arvro 将 lib 添加到 autoload_paths 似乎并不能解决问题。您必须明确要求要在生产中自动加载的文件。至少那是我必须做的才能让它工作。任何人都知道这是否是预期行为以及为什么?
  • @Daniel 这个答案可以帮助你:stackoverflow.com/a/19852844/3182764。基本上,自动加载将在调用时需要您的类。
  • @Arvro 完美。谢谢! TL;其他所有人的 DR:将 lib 路径添加到 config.autoload_pathsconfig.eager_load_paths 以加载您的代码并在生产中使用!
【解决方案3】:

config/application.rb 中,更改:

config.autoload_paths << Rails.root.join('lib')

到这里:

config.eager_load_paths << Rails.root.join('lib')

eager_load_paths 将在生产和开发中按需加载。这样做,您不需要明确要求每个文件。

this answer上查看更多信息。

【讨论】:

    猜你喜欢
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多