Ruby on Rails:你能把Ruby代码放在YAML配置文件中吗?

And*_*rew 38 ruby yaml

我想在我的amazon_s3.yml配置文件中做类似的事情:

access_key_id: ENV['S3_KEY']
secret_access_key: ENV['S3_SECRET']
Run Code Online (Sandbox Code Playgroud)

......但我知道这不起作用.不确定它是否可行,但是你可以将Ruby代码放在YAML文件中吗?

Sut*_*tto 65

不正常/直接.我这样说是因为为了使用ruby结果,你需要在加载文件之前先使用类似ERB的东西.在代码方面,您需要从以下内容:

loaded_data = YAML.load_file("my-file.yml")
Run Code Online (Sandbox Code Playgroud)

甚至

loaded_data = YAML.load(File.read("my-file.yml"))
Run Code Online (Sandbox Code Playgroud)

至:

loaded_data = YAML.load(ERB.new(File.read("my-file.yml")).result)
Run Code Online (Sandbox Code Playgroud)

在这种特定情况下,您必须查看正在加载文件的内容 - 在某些情况下,它可能已经设计为直接将其加载到环境之外,或者您可能需要:

  1. 猴子修补代码
  2. Fork +使用您的自定义版本.

由于有一些使用amazon_s3.yml的插件,可能值得发布您正在使用哪个库使用它 - 或者,我相信快速谷歌AWS库允许您将AMAZON_ACCESS_KEY_ID和AMAZON_SECRET_ACCESS_KEY定义为env vars,它将把它们拿出来开箱即用.


Mik*_*ffe 12

你可以通过ERB解释它,在这种情况下它就像一个ERB视图,Ruby代码介于<%和之间%>

尝试:

access_key_id: <%= ENV['S3_KEY'] %>
secret_access_key: <%= ENV['S3_SECRET'] %>
Run Code Online (Sandbox Code Playgroud)

......看看它是否有效