【问题标题】:Rails lib includesRails 库包括
【发布时间】: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”

我被难住了……有人吗?

编辑:有人知道我可以在哪里调试吗?

【问题讨论】:

  • 愚蠢的问题,但是您是否重新启动了服务器?如果没有,重新启动进程是否修复它?
  • 是的,我确实尝试重新启动。之后服务器无法启动。

标签: ruby-on-rails include


【解决方案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] 加载该代码”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多