我们的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。
答案 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" %>