在Rails 3中将lib添加到'config.autoload_paths'不会自动加载我的模块?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我在Rails.root/lib文件夹中放置一个文件名g.rb 文件内容是这样的:

module Google
end

然后我补充

config.autoload_paths += %W(#{config.root}/lib #{Rails.root}/app/delayed_jobs)

到我的 Rails.root/config/application.rb

但是,当我尝试从Google调用Google时rails console,会引发异常。只有当我执行时,异常才会消失require 'google'。为什么?我的文件不应该自动加载,不应该在没有任何额外require语句的情况下访问模块?

提问于
用户回答回答于

我在让我的模块在Heroku上运行时也遇到了类似的问题。除了Stephen C声明的自动命名约定之外,我发现模块代码必须是require由于...threadsafeRails在Heroku上的生产环境所作的假设(尽管如此)threadsafe在我的production.rb)配置文件。)只要我require在调用之前对模块文件进行了修改include在模块上,一切都开始正常工作了。

require 'mymodule'
include Mymodule

请看一下这篇优秀文章关于在Heroku(生产)中正确加载模块的主题。

用户回答回答于

为了让Rails自动加载我的类,类名应该符合文件名和文件夹结构。例如,如果我想让Google模块自动加载,我必须将它放在google.rb/ lib下(直接从/ lib指定自动加载)。如果我要自动加载Google::Docs,那么我要么地方这里面google.rbgoogle/docs.rb。

扫码关注云+社区

领取腾讯云代金券