【问题标题】:Rails credentials with environment on Capistrano task带有 Capistrano 任务环境的 Rails 凭据
【发布时间】:2021-08-24 16:41:12
【问题描述】:

我正在使用 Rails 凭据在我的 Rails 6 应用程序中存储机密数据。有 3 个环境(开发、登台、生产)。

当我运行 cap staging deploy:my_task 任务时,总是使用默认密钥路径 (config/master.key) 而不是 config/environments/staging.key。我试图将它作为变量传递,但它不起作用。这是我的任务


task :my_task do
    on roles(:app), in: :sequence, wait: 5 do
      run_locally do
        with rails_env: fetch(:rails_env), rails_master_key: `cat config/credentials/#{fetch(:rails_env)}.key` do
          
          pp Rails.application.credentials
        end
      end
    end
  end

pp Rails.application.credentials 我得到了:

#<ActiveSupport::EncryptedConfiguration:0x00005640fe8cce28
@config={},
@content_path=
 #<Pathname:/builds/path/to/my/project/config/credentials.yml.enc>,
@env_key="RAILS_MASTER_KEY",
@key_file_contents=nil,
@key_path=
 #<Pathname:/builds/path/to/my/project/config/master.key>,
@options={},
@raise_if_missing_key=false>

我错过了什么?

【问题讨论】:

    标签: ruby-on-rails capistrano credentials


    【解决方案1】:

    我最终选择了手动方式。这是我找到的唯一方法。

    task :my_task do
        on roles(:app), in: :sequence, wait: 5 do
          run_locally do
            with rails_env: fetch(:rails_env) do
              env_path = "config/credentials/#{fetch(:rails_env)}"
              credentials = Rails.application.encrypted("#{env_path}.yml.enc",
                                              key_path: "#{env_path}.key").config
              pp credentials
          end
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2014-07-25
      • 2013-07-16
      • 2018-07-15
      • 1970-01-01
      相关资源
      最近更新 更多