2014-01-07 66 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