Ruby on rails Rails 5.2 credentials.yml.enc ERB未解析

Ruby on rails Rails 5.2 credentials.yml.enc ERB未解析,ruby-on-rails,twilio,erb,twilio-api,ruby-on-rails-5.2,Ruby On Rails,Twilio,Erb,Twilio Api,Ruby On Rails 5.2,我正在尝试用Twilio设置短信。我在这里浏览他们的指南:但是我遇到了一个问题,credentials.yml.enc中的ERB没有被解析为twilio凭据 我曾尝试在不使用指南中推荐的ERB的情况下添加凭据,这是可行的,但会阻止我将其定义为环境变量 # config/credentials.yml twilio_account_sid: <%= ENV.fetch("TWILIO_ACCOUNT_SID", "XXXXXXX") %> twilio_auth_token: &

我正在尝试用Twilio设置短信。我在这里浏览他们的指南:但是我遇到了一个问题,credentials.yml.enc中的ERB没有被解析为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") %>
我在控制台中运行了以下命令:

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)
URI::InvalidURIError(错误的URI(不是URI?):https://api.twilio.com/2010-04-01/Accounts//Messages.json)
我猜这是因为Rails 5.2的新加密credentials.yml文件没有使用ERB进行处理。有人有好的解决办法吗?我错过什么了吗


谢谢

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

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

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


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

要编辑凭据并使用.enc文件,请运行
EDITOR=vi rails credentials:edit
并将密钥放在其中(而不是使用env变量或credentials.yml文件)。当与
put一起输出时,
rails.application.credentials.twilio_phone_number
的值是多少?是不是
?是
Rails.application.credentials.twilio\u phone\u number
可能是我误用了它。我刚开始使用5.2。我想我可以使用环境变量为开发/登台环境定义不同的值。如果不使用环境变量,您会如何建议这样做?
URI::InvalidURIError (bad URI(is not URI?): https://api.twilio.com/2010-04-01/Accounts/<%= ENV.fetch("TWILIO_ACCOUNT_SID", "XXXXXXX") %>/Messages.json)