首页 > 解决方案 > Rails 5.2 credentials.yml.enc ERB 不解析

问题描述

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

我尝试在不使用指南中推荐的 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 进行处理。有人有好的解决方法吗?我错过了什么吗?

谢谢!

标签: ruby-on-railstwilioerbtwilio-apiruby-on-rails-5.2

解决方案


我认为您在滥用该config/credentials.yml.enc文件。

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

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

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


推荐阅读