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_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上查看更多信息。

【讨论】:

以上是关于Rails 5 忽略 /lib 类?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk RDS_DB_NAME 环境变量被忽略 (Rails 5)

Rails 3.1 - 忽略 CSRF?

Rails 3 AJAX请求真实性令牌被忽略

rails :dependent=>:destroy 被忽略

如何在 Rails 开发中忽略延迟作业查询日志记录

在 Rails 和 PostgreSQL 中完全忽略时区