2013-10-30 58 views
0

這是一個非常基本的問題,但我找不到完全符合我需要的答案。Ruby on Rails - 使用來自不同目錄的模塊

我在樹幹/應用/型號/解析器/ 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

對於開發與測試環境,您的Gemfile中是否有不同的寶石? –

+0

不,本地gemfile和測試gemfile看起來完全相同。 – whognu

+1

我指的是Gemfile中的':development'與':test'環境__。 –

回答

1

您可以手動添加要包含在application.rb中的目錄。可能要確保在你的application.rb或test.rb配置文件中有這個autoload_paths,你的可能是你的development.rb文件。

config.autoload_paths += %W(#{config.root}/lib/)