Rails 5.2 credentials.yml.enc ERB 不解析

Posted

技术标签:

【中文标题】Rails 5.2 credentials.yml.enc ERB 不解析【英文标题】:Rails 5.2 credentials.yml.enc ERB not parsing 【发布时间】:2019-06-29 06:30:38 【问题描述】:

我正在尝试使用 Twilio 设置 SMS 短信。我将在此处浏览他们的指南:https://www.twilio.com/blog/2017/12/send-sms-ruby-rails-5-coffee.html,但我遇到了一个问题,即不为 ​​twilio 凭据解析 credentials.yml.enc 中的 ERB。

我尝试在不使用指南中推荐的 ERB 的情况下添加凭据,虽然可行,但我无法将这些凭据定义为环境变量。

# config/credentials.yml

twilio_account_sid:  <%= ENV.fetch("TWILIO_ACCOUNT_SID", "XXXXXXX") %>
twilio_auth_token:  <%= ENV.fetch("TWILIO_AUTH_TOKEN", "XXXXXXX") %>
twilio_phone_number:  <%= ENV.fetch("TWILIO_PHONE_NUMBER", "XXXXXXX") %>
# config/initializers/twilio.rb

Twilio.configure do |config|
  config.account_sid = Rails.application.credentials.twilio_account_sid
  config.auth_token = Rails.application.credentials.twilio_auth_token
end

我在控制台中运行了这个:

client = Twilio::REST::Client.new
  client.messages.create(
    from: Rails.application.credentials.twilio_phone_number,
    to: '+11231234',
    body: 'Hello there! This is a test'
  )

我最终得到:

URI::InvalidURIError (bad URI(is not URI?): https://api.twilio.com/2010-04-01/Accounts/<%= ENV.fetch("TWILIO_ACCOUNT_SID", "XXXXXXX") %>/Messages.json)

我猜这是因为 Rails 5.2 的新加密凭据.yml 文件没有得到 ERB 处理。有人有好的解决方法吗?我错过了什么吗?

谢谢!

【问题讨论】:

要编辑凭证并使用 .enc 文件,运行 EDITOR=vi rails credentials:edit 并将密钥放在那里(而不是使用 env 变量或 credentials.yml 文件)。 puts输出时Rails.application.credentials.twilio_phone_number的值是多少?是&lt;%= ENV.fetch("TWILIO_PHONE_NUMBER", "XXXXXXX") %&gt;吗? 是的 Rails.application.credentials.twilio_phone_number 最终成为 &lt;%= ENV.fetch("TWILIO_PHONE_NUMBER", "XXXXXXX") %&gt; 【参考方案1】:

我认为您误用了 config/credentials.yml.enc 文件。

在该功能之前,人们会使用环境变量来存储机密(因为将它们提交到您的代码存储库是一种不好的做法)。这很麻烦。

于是,Rails 5.2 引入了加密存储。关键是你不再需要管理环境变量,你只需将你的秘密直接提交到你的代码库中(当然是加密的)。

因此,要么直接将机密写入config/credentials.yml.enc 文件,要么将它们保存在环境变量中,然后只使用config/initializers/ 中的初始化文件。不要同时做这两件事。

【讨论】:

我可能误用了它。我刚开始使用 5.2。我想我认为我可以使用环境变量为开发/登台环境定义不同的值。如果不使用环境变量,您会如何建议这样做?

以上是关于Rails 5.2 credentials.yml.enc ERB 不解析的主要内容,如果未能解决你的问题,请参考以下文章

无法解密 config/credentials.yml.enc。也许您传递了错误的密钥?

将 API 密钥存储到 credentials.yml.enc 的正确方法?

在 github 操作上运行测试时,Rails 凭证值为零

Rails 5.2 无法使用 Sublime Text 打开 Rails 凭据

如何在 ActiveStorage (Rails 5.2) 中更新附件

在 Rails 5.2 中禁用活动存储