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

Gus*_*sto 2 yaml ruby-on-rails ruby-on-rails-3

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

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

Test:
  file_path: "#{Rails.root}/tmp/test"
Run Code Online (Sandbox Code Playgroud)

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

Cod*_*lan 5

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

record:
  updated_at: <%= Time.now %>
Run Code Online (Sandbox Code Playgroud)

解决方案是通过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
Run Code Online (Sandbox Code Playgroud)

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

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

test:
  file_path: <%= "#{Rails.root}/tmp/test" %>
Run Code Online (Sandbox Code Playgroud)