这是一个非常基本的问题,但我找不到我需要的答案。
我的开发环境中的trunk / app / models / parsers / my_file.rb中有以下代码:
def initialize
...
@logger = Utils::SingletonLogger.get_logger
@logger.debug("Instantiating my_file object")
end
运行良好。
但是当我将它部署到测试环境时(所有代码应该是相同的,但我不知道从哪里开始寻找差异,如果有的话),Rails抱怨它无法找到Parsers :: MyFile: :utils的。我想要使用的Utils模块位于app / lib / my_utils.rb中。这让我觉得Rails正在为解析器子目录中的代码创建某种命名空间,并且只在那里寻找Utils模块,但我还没有弄清楚如何使它适合我。是否有一些主要的应用程序级前缀可用于指定在当前目录结构之外查看?
我尝试添加require 'my_utils'
和require_relative '../../../lib/my_utils.rb'
。前者找不到文件,后者只是抛出与我完全没有任何要求时相同的错误。我不确定我是否应该要求这个。
在任何情况下,我显然不太明白如何在不同目录中的模块中引用代码,我不明白何时/为什么rails在某些时候/环境需要显式路径而不是其他人,而我不知道如何使Rails看起来在当前文件的代码之外。任何这些任何帮助将不胜感激。
哦,我正在使用Ruby 1.9.3和rails 3.2.1。
编辑:它刚刚开始工作,没有对application.rb或环境文件进行任何更改。它在当前版本中甚至没有要求。是否有任何明显的原因,它一开始不工作,然后在另一台服务器重启后工作? (我很确定在代码进入后我重新启动它 - 我不认为我之前忘记这样做。)
无论如何,谢谢你的帮助 - 我真的很感激。
答案 0 :(得分:1)
您可以手动添加要包含在application.rb中的目录。可能想要在你的application.rb或test.rb配置文件中确保你有这个autoload_paths,你的可能是你的development.rb文件特有的。
config.autoload_paths += %W(#{config.root}/lib/)