我希望能够编辑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