【问题标题】:Rails 5.2 Encrypted credentials for production environmentRails 5.2 生产环境的加密凭证
【发布时间】:2018-12-06 01:51:56
【问题描述】:

我已经使用 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 credentials:edit

development:
 secret_key_base: absdss

test:
 secret_key_base: 123232

production:
 secret_key_base: 123456

保存凭据后,我可以在本地的 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" 

凭证在生产服务器上不起作用,我们在 gitlab 中使用 CI/CD 进行部署阶段,当我运行

rails db:create db:migrate

我收到以下错误

> 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'

现在的问题是如何将 RAILS_MASTER_KEY 设置为生产服务器?

【问题讨论】:

    标签: ruby-on-rails ruby gitlab-ci ruby-on-rails-5.1 ruby-on-rails-5.2


    【解决方案1】:
    Rails.application.credentials.development&.dig(:secret_key_base)
    

    试试这个。

    【讨论】:

      【解决方案2】:

      我分享几点可能对你有帮助

      加密凭据比明文凭据或环境变量具有一些优势

      Rails 5.1 引入了加密密钥

      config/secrets.yml.key
      配置/secrets.yml.enc

      Rails 5.2 将这两个秘密替换为加密凭据

      config/credentials.yml.enc
      配置/master.key

      config/master.key 文件是在创建 rails 项目时创建的

      加密密钥(master.key)被 git 忽略

      生产中

      config/environments/production.rb

      config.require_master_key = true
      

      没有密钥就无法解密您的凭据

      管理密​​钥

      一个。 scp 或 sftp 文件

      b.如果您需要向开发人员提供密钥的副本,那么您可以使用密码管理器,因为他们使用加密。

      c。我使用最后一关来管理主密钥文件

      用于加密凭据的密钥与密钥库不同。

      master.key 上的密钥用于加密和解密所有凭据。它不会替换密钥库。

      Rails 需要密钥库。如果要生成新的密钥库运行,

      bin/rails secret
      

      并通过运行 bin/rails credentials:edit 将其添加到您的凭据中。

      【讨论】:

      • 更多信息可以查看medium.com/@praaveen/…博客
      • 我已配置“$RAILS_MASTER_KEY”> config/master.key。它以 ArgumentError: key must be 16 bytes 错误结束 -
      • 嗨@Praveen,当您在“管理您的密钥”部分中说“Scp 或 sftp 文件”时 - 您通常会如何执行此操作?我曾尝试使用 Filezilla,但 master.key 在我的本地计算机上不可见(由于我期望它的文件扩展名),而且我也无权访问服务器上的目标文件夹 /app_name/shared/config。我已经看到有人提到使用 rake 任务来执行此操作,但想知道是否有更简单的方法?
      • 附加信息非常有用。谢谢!
      【解决方案3】:

      您可以将您的主密钥作为MASTER_KEY 秘密变量放入 Gitlab CI/CD 设置中,然后放入

      echo "$MASTER_KEY" > config/master.key
      

      在您的.gitlab-ci.yml 文件的before_script 部分中。

      【讨论】:

      • 感谢@Marek Lipka 的即时回复。现在添加 master.key 后,我得到了 ArgumentError: key must be 16 bytes
      • 我已经配置了"$RAILS_MASTER_KEY" &gt; config/master.key。它最终出现ArgumentError: key must be 16 bytes 错误
      • 您确定在 CI 环境中设置了 RAILS_MASTER_KEY 环境变量吗?
      • @Aravi 您的 RAILS_MASTER_KEY 值需要正好是 32 个字节。见github.com/rails/rails/issues/33528#issuecomment-412677795
      猜你喜欢
      • 2020-08-18
      • 2018-07-10
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      相关资源
      最近更新 更多