Rails 5.2 certificate.yml.enc ERB无法解析

时间:2019-02-05 12:25:31

标签: ruby-on-rails twilio erb twilio-api ruby-on-rails-5.2

我正在尝试使用Twilio设置短信。我将在这里浏览他们的指南: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的新加密的certificate.yml文件没有被ERB处理。任何人都有一个好的解决方法?我想念什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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