首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将lib添加到Rails3中的'config.autoload_paths‘不会自动加载我的模块

将lib添加到Rails3中的'config.autoload_paths‘不会自动加载我的模块
EN

Stack Overflow用户
提问于 2010-11-02 12:01:27
回答 4查看 37.7K关注 0票数 73

我在side Rails.root/lib文件夹中放置了一个名为g.rb的文件,文件内容如下:

代码语言:javascript
复制
module Google
end

然后我补充说

代码语言:javascript
复制
config.autoload_paths += %W(#{config.root}/lib #{Rails.root}/app/delayed_jobs)

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

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

EN

回答 4

Stack Overflow用户

发布于 2010-11-02 12:10:56

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

票数 113
EN

Stack Overflow用户

发布于 2011-09-06 13:19:01

我在Heroku上运行我的模块时也遇到了类似的问题。除了Stephen C声明的自动加载命名约定之外,我还发现模块代码必须是require'd,这是因为Heroku上的Rails生产环境做出了threadsafe假设(即使threadsafe在我的production.rb配置文件中被注释掉了)。当我在模块上调用include之前对模块文件执行require操作时,一切都开始正常工作。

代码语言:javascript
复制
require 'mymodule'
include Mymodule

请查看this excellent article关于在Heroku (生产)中正确加载模块的主题。

票数 27
EN

Stack Overflow用户

发布于 2013-07-16 03:35:36

config.autoload_paths更改为config.eager_load_paths

(基于Rails issue #6850Force reload! from lib directory in rails 3.2 console)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4074830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档