我希望能夠編輯YAML
文件,並重新加載它在軌道4應用更改YAML文件。現在我通過initializer
加載YAML
文件,我知道這隻會加載一次文件,並且在更改文件後需要重新啓動。無需重新啓動軌道4
我該如何完成YAML
重載/刷新,因爲它是通過Rails中的i18n YAML
文件完成的?
我希望能夠編輯YAML
文件,並重新加載它在軌道4應用更改YAML文件。現在我通過initializer
加載YAML
文件,我知道這隻會加載一次文件,並且在更改文件後需要重新啓動。無需重新啓動軌道4
我該如何完成YAML
重載/刷新,因爲它是通過Rails中的i18n YAML
文件完成的?
當您加載文件時,我假設您將它分配給某個變量或常量。如果您沒有分配它,那麼每次都會執行加載。
相反的:
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')
直接在您的應用程序中您需要閱讀文件。
而不是require
使用load
來加載文件。
require
只會加載一次文件。但load
將在調用時加載。
查看更多有關這這裏http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/
您可以嘗試在檢查文件的更改時間線的東西,例如:
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
你正確的瓶頸;-)感謝您的答案@bbozo – mahatmanich
嘿,這似乎並沒有工作,進一步你會不想使用mtime來實際檢查修改? – mahatmanich
非常感謝! – mahatmanich
可能不完美,您將加載文件並在每個調用'YourFileReader.load'的請求上解析它。考慮到磁盤IO往往是最大的瓶頸,這可能會導致繁忙網站的嚴重衰退。查看我的解決方案,以便在文件更改時重新加載和重新分析文件。 – bbozo