ruby-on-rails - 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 进行处理。有人有好的解决方法吗?我错过了什么吗?
谢谢!
解决方案
我认为您在滥用该config/credentials.yml.enc
文件。
在该功能之前,人们会使用环境变量来存储机密(因为将它们提交到您的代码存储库中是不好的做法)。这很麻烦。
于是,Rails 5.2 引入了加密存储。关键是你不再需要管理环境变量,你只需将你的秘密直接提交到你的代码库中(当然是加密的)。
因此,要么直接将秘密写入config/credentials.yml.enc
文件,要么将它们保存在环境变量中,然后只使用config/initializers/
. 不要同时做这两个。
推荐阅读
- r - R/purrr:使用 map 有条件地重新分配柱状数据
- python - 如何在熊猫数据框中将多行转换为多个标题标题
- amplitude - 获取 Amplitude 上的所有非活动用户
- metadata - 如何使用 umbraco 发布房产内容?
- python - sklearn GridsearchCV 与 pipline 结合如何工作?
- docker - Docker - 构建环境
- javascript - AWS Lambda NodeJs 无法返回响应
- r - 如何修复 R 中不起作用的函数,但代码可以
- kubernetes - 将 GCloud 中 GKE 中的运行状况检查从 HTTP 更改为 TCP 后重置
- java - 如何在 Spring Boot OIDC 应用程序的控制器中获取用户详细信息?