我们有一个用于 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 变量。
最佳答案
您可以在 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" %>
关于ruby-on-rails - 如何在配置文件中使用Rails.root?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834684/