2

我们有一个用于 Rails 3 应用程序的配置 YAML 文件,每个 Rails 环境的文件位置如下:

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

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

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

4

1 回答 1

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" %>
于 2013-09-16T18:23:21.997 回答