2014-01-07 68 views
2

我希望能夠編輯YAML文件,並重新加載它在軌道4應用更改YAML文件。現在我通過initializer加載YAML文件,我知道這隻會加載一次文件,並且在更改文件後需要重新啓動。無需重新啓動軌道4

我該如何完成YAML重載/刷新,因爲它是通過Rails中的i18n YAML文件完成的?

回答

2

當您加載文件時,我假設您將它分配給某個變量或常量。如果您沒有分配它,那麼每次都會執行加載。

相反的:

CONTENT = Yaml.load_file('your_file.yml') 

創建一個簡單的類或函數:

module YourFileReader 
    def self.load 
    Yaml.load_file('your_file.yml') 
    end 
end 

,並使用定義的方法來讀取文件在你的應用

YourFileReader.load 

或者更簡單,使用

Yaml.load_file('your_file.yml') 

直接在您的應用程序中您需要閱讀文件。

+0

非常感謝! – mahatmanich

+0

可能不完美,您將加載文件並在每個調用'YourFileReader.load'的請求上解析它。考慮到磁盤IO往往是最大的瓶頸,這可能會導致繁忙網站的嚴重衰退。查看我的解決方案,以便在文件更改時重新加載和重新分析文件。 – bbozo

2

您可以嘗試在檢查文件的更改時間線的東西,例如:

module MyFileReader 
    def self.my_yaml_contents 
    if @my_yaml_file_ctime != File.ctime(file_name) 
     @my_yaml_contents = YAML.load(File.open(file_name)) 
     @my_yaml_file_ctime = File.ctime(file_name) 
    end 
    @my_yaml_contents 
    end 
end 

MyFileReader.my_yaml_contents方法將加載和解析只在啓動時的文件,改變,在此期間服務已經被解析數據,

看到http://www.ruby-doc.org/core-2.0.0/File.html#method-c-ctime

+0

你正確的瓶頸;-)感謝您的答案@bbozo – mahatmanich

+0

嘿,這似乎並沒有工作,進一步你會不想使用mtime來實際檢查修改? – mahatmanich