我正在尝试使用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处理。任何人都有一个好的解决方法?我想念什么吗?
谢谢!
答案 0 :(得分:1)
我认为您在滥用config/credentials.yml.enc
文件。
在使用该功能之前,人们将使用环境变量来存储机密(因为将它们提交到您的代码存储库中是不明智的做法)。这很麻烦。
因此,Rails 5.2引入了加密存储。关键是您不再需要管理环境变量,您只需将您的机密直接提交到代码库中(当然可以加密)。
因此,您要么直接将您的机密写入config/credentials.yml.enc
文件中,要么要将其保存在环境变量中,然后仅在config/initializers/
中使用初始化程序文件。不要同时做这两个。