Rails 库包括
Posted
技术标签:
【中文标题】Rails 库包括【英文标题】:Rails lib includes 【发布时间】:2011-01-04 03:30:24 【问题描述】:我有一个关于 lib 目录中定义的模块的令人费解的问题
我有两个文件
#lib/authentication.rb
module Authentication
end
#lib/test_module.rb
module TestModule
end
在我的应用程序控制器中
class ApplicationController < ActionController::Base
include Authentication
include TestModule
end
身份验证模块正确加载,但测试模块没有
我得到“未初始化的常量 ApplicationController::TestModule”
我被难住了……有人吗?
编辑:有人知道我可以在哪里调试吗?
【问题讨论】:
愚蠢的问题,但是您是否重新启动了服务器?如果没有,重新启动进程是否修复它? 是的,我确实尝试重新启动。之后服务器无法启动。 【参考方案1】:在 ApplicationController 文件的顶部添加 require 'lib/test_module'
可能会有所帮助
【讨论】:
试过了,这就是我没有加载这样的文件——lib/test_module (MissingSourceFile) 您确定文件在正确的位置吗?由于require语句找不到... 我确信它在正确的位置,但我再次检查了一遍。由于某种原因,文件名为 test_module.r?b。这很奇怪,因为它在 TextMate(我创建文件的位置)中显示为 .rb。我重命名了文件,它工作。感谢您抽出宝贵时间,我很困惑,需要另一双眼睛。【参考方案2】:从 Rails 3 开始,确保将lib
目录添加到config/application.rb
中的config.autoload_paths
,以便读取包含您的模块的文件并加载该模块。
config.autoload_paths += %W(#config.root/lib)
查看here 了解有关此内容和加载子目录的更多信息。
另外,supposedly“您不应该在 rails 应用程序中使用 require,因为它会阻止 ActiveSupport::Dependencies 正确 [un] 加载该代码”。
【讨论】:
以上是关于Rails 库包括的主要内容,如果未能解决你的问题,请参考以下文章