Ara*_*ind 2 ruby ruby-on-rails gitlab-ci ruby-on-rails-5.1 ruby-on-rails-5.2
我已经创建了 5.2 版本的新 Rails 应用程序。Rails 5.2 引入了秘密的加密功能。
我已经在 devise.rb 文件中配置了密钥
config.secret_key = Rails.application.credentials[Rails.env.to_sym][:secret_key_base]
并为所有环境添加了 secret_key 的使用
EDITOR=vim rails 凭证:编辑
development:
secret_key_base: absdss
test:
secret_key_base: 123232
production:
secret_key_base: 123456
Run Code Online (Sandbox Code Playgroud)
保存凭据后,我可以在本地的 rails 控制台中获取 secret_key
rails 控制台中的输出:
Running via Spring preloader in process 44308
Loading development environment (Rails 5.2.0)
2.5.1 :001 > Rails.application.credentials.development[:secret_key_base]
=> "absdss"
Run Code Online (Sandbox Code Playgroud)
凭据在生产服务器上不起作用,我们在 gitlab 中使用 CI/CD 进行部署阶段,当我运行
rails 数据库:创建数据库:迁移
我收到以下错误
> rails db:create db:migrate
---> Running in 1563453ddf2a
rails aborted!
NoMethodError: undefined method `[]' for nil:NilClass
/usr/src/app/config/initializers/devise.rb:12:in `block in <main>'
/usr/local/bundle/gems/devise-4.4.3/lib/devise.rb:307:in `setup'
/usr/src/app/config/initializers/devise.rb:5:in `<main>'
/usr/local/bundle/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:50:in `load'
Run Code Online (Sandbox Code Playgroud)
现在的问题是如何将 RAILS_MASTER_KEY 设置为生产服务器?
我分享几点可能对你有帮助
加密凭证与纯文本凭证或环境变量相比具有一些优势
Rails 5.1 引入了加密的秘密
配置/secrets.yml.key
配置/secrets.yml.enc
Rails 5.2 用加密凭证替换了这两个秘密
config/credentials.yml.enc
config/master.key
config/master.key 文件是在创建 rails 项目时创建的
加密密钥(master.key)被 git 忽略
生产中
配置/环境/production.rb
config.require_master_key = true
Run Code Online (Sandbox Code Playgroud)
没有密钥就无法解密您的凭据
管理密钥
一种。scp 或 sftp 文件
湾 如果您需要向开发人员提供密钥的副本,那么您可以使用密码管理器,因为它们使用加密。
C。我使用 last pass 来管理主密钥文件
用于加密凭证的密钥不同于密钥库。
master.key 上的密钥用于加密和解密所有凭据。它不会替换密钥库。
Rails 需要密钥库。如果要生成新的密钥基本运行,
bin/rails secret
Run Code Online (Sandbox Code Playgroud)
并通过运行 bin/rails credentials:edit 将其添加到您的凭证中。
| 归档时间: |
|
| 查看次数: |
8314 次 |
| 最近记录: |