如何在配置文件中使用Rails.root?

时间:2013-09-16 18:20:00

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

我们的Rails 3应用程序有一个配置YAML文件,每个Rails环境的文件位置都是这样的:

Production:
  file_path: "#{Rails.root}/tmp/foobar"

Test:
  file_path: "#{Rails.root}/tmp/test"

此“file_path”目录会根据部署应用程序的目标计算机而更改。所以我们希望我们可以将这个模板字符串与替换的Rails.root var一起使用。但是在执行期间,当我们从配置文件加载并使用此字符串时,它似乎不会替换#{Rails.root}的实际Rails.root值。所以我们必须使用gsub。这感觉相当尴尬,我希望有一种不同的方式在我们的配置YAML文件中指定它,所以它在运行时自动进行替换。 是的,有几种替代方法可以解决这个问题,但一般来说我的问题是如何从YAML配置文件中使用这样的Rails vars。

1 个答案:

答案 0 :(得分:5)

您可以在YAML文件中使用嵌入式ERB命令,这是基于YAML的测试装置的工作方式,并允许您执行以下操作:

record:
  updated_at: <%= Time.now %>

解决方案是通过ERB运行文件,然后运行YAML:

config = YAML.load(ERB.new(File.read("#{Rails.root}/config/config.yml")).result)[Rails.env]
config['file_path'] # now contains your full path

您的YAML文件需要稍微更新才能使用ERB输出表达式 - 因此请进行以下更新:

production:
  file_path: <%= "#{Rails.root}/tmp/foobar" %>

test:
  file_path: <%= "#{Rails.root}/tmp/test" %>