加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – NameError:Heroku上的未初始化常量

发布时间:2020-12-17 02:49:52 所属栏目:百科 来源:网络整理
导读:我有一个Rails 5应用程序,其中一些模块/类位于/ lib下.在开发中,我可以通过rails控制台访问它们,如下所示: irb(main):001:0 MyClass.do_something 在Heroku的生产中我得到了这个: irb(main):001:0 MyClass.do_somethingNameError: uninitialized constant
我有一个Rails 5应用程序,其中一些模块/类位于/ lib下.在开发中,我可以通过rails控制台访问它们,如下所示:

irb(main):001:0> MyClass.do_something

在Heroku的生产中我得到了这个:

irb(main):001:0> MyClass.do_something
NameError: uninitialized constant MyClass

您可能已经猜到我在application.rb中自动加载了/ lib目录:

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

但是,最奇怪的是,我可以从rake任务访问这个类.所以这样的事情很好:

task do_something: :environment do
  MyClass.do_something
end

这告诉我该课程出现在Heroku上.

有任何想法吗?

解决方法

Rails在生产中不会为了线程安全而自动加载,而是急切地加载应用程序常量.您可以使用eager_load_paths方法修复问题.

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

如果您仍想在开发中自动加载,可以使其成为有条件的

load_path_strategy = Rails.env.production? ? :eager_load_paths : :autoload_paths
config.public_send(load_path_strategy) << Rails.root.join('lib')

如果您确实需要在生产中自动加载此目录,可以将enable_dependency_loading设置为true.

config.enable_dependency_loading = true
config.autoload_paths << Rails.root.join('lib')

有关更多说明,请参见this blog post.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读