0

这是一个非常基本的问题,但我找不到我需要的确切答案。

我的开发环境中的 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'and require_relative '../../../lib/my_utils.rb'。前者找不到文件,后者只是抛出与我根本没有任何要求时相同的错误。我不确定我是否应该要求这个。

无论如何,我显然不太明白如何在不同目录中引用模块中的代码,我不明白何时/为什么 rails 在某些时候/环境而不是其他环境需要显式路径,而且我不知道知道如何让 Rails 在当前文件之外查找代码。任何这些方面的帮助将不胜感激。

哦,我正在使用 Ruby 1.9.3 和 rails 3.2.1。

编辑:它刚刚开始工作,没有对 application.rb 或环境文件进行任何更改。在当前版本中甚至没有要求。是否有任何明显的原因让它一开始不工作,然后在另一台服务器重新启动后工作?(我很确定我在输入代码后重新启动了它——我想我之前没有忘记这样做。)

无论如何,感谢您的帮助 - 我真的很感激。

4

1 回答 1

1

You can manually add directories you want to include in application.rb. Might want to make sure in your application.rb or test.rb config files you have this autoload_paths in there, yours might be specific to your development.rb file.

config.autoload_paths += %W(#{config.root}/lib/)
于 2013-10-30T21:09:31.800 回答