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 库包括的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp5 extend扩展库放哪里,该怎么new

thinkphp5 extend扩展库放哪里,该怎么new

Rails 库包括

库包模块

python怎么导入库包?

如何使用标准库包名称解决 Python 包中的命名空间冲突?