ruby-on-rails - 如何在配置文件中使用Rails.root?

标签 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 变量。然而在执行过程中,当我们从配置文件加载并使用这个字符串时,它似乎并没有用实际的 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/

相关文章:

linux - GitLab-Runner "listen_address not defined"错误

ruby-on-rails - 在 rails 中解析日期

ruby-on-rails - 在 Ruby on Rails 中进行异常处理的正确方法是什么?

ruby-on-rails - 在 "references"迁移中指定列名称

ajax - 使用 AJAX 搜索、排序

sql - 跟踪 Rails 3 SQL 查询

csv - 如何在 swagger/yaml 文档上正确记录文本/csv 响应?

linux - sed 编辑 yaml 文件,其中每个键都有单独的值

ruby-on-rails - 无法编辑 Rails 凭据 Rails 5.2

mysql - 在关联Rails中的多个记录中选择特定记录