Rails 5 忽略 /lib 类?
Posted
技术标签:
【中文标题】Rails 5 忽略 /lib 类?【英文标题】:Rails 5 ignoring /lib class? 【发布时间】: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 中的一个错误。它在退出测试版后也存在。对我来说,它只发生在生产中,而不是在开发中。 【参考方案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 这个答案可以帮助你:***.com/a/19852844/3182764。基本上,自动加载将在调用时需要您的类。
@Arvro 完美。谢谢! TL;其他所有人的 DR:将 lib 路径添加到 config.autoload_paths
和 config.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上查看更多信息。
【讨论】:
以上是关于Rails 5 忽略 /lib 类?的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic Beanstalk RDS_DB_NAME 环境变量被忽略 (Rails 5)