更改YAML文件而不重新启动Rails 4

时间:2014-01-07 13:39:39

标签: ruby-on-rails ruby ruby-on-rails-4 yaml

我希望能够编辑YAML文件并在 Rails 4 应用中重新加载。现在我正在通过YAML加载initializer文件,我知道这只会加载文件一次,更改后需要重新启动。

如何通过Rails中的YAML文件完成i18n YAML重新加载/刷新?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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')

直接在您需要阅读文件的应用中。

答案 2 :(得分:0)

而不是require使用load来加载文件。

require只会加载一次文件。但load会在调用时加载。

在此处详细了解http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/