Как управлять учетными данными для разных сред в Rails 5.2? - PullRequest
0 голосов
/ 06 декабря 2018

Я (до сих пор / всегда) новичок в Rails.Пока я строил свой проект, Rails обновился до v5.2 с зашифрованными учетными данными .Сейчас я собираюсь развернуть в производство и обнаружил, что не понимаю, как отделить учетные данные от разработки.И я не уверен, что знаю, как бы это сделать в v5.1.Так как же это сделать в Rails 5.2?

Ответы [ 5 ]

0 голосов
/ 07 августа 2019

Я решил свою проблему, используя этот код

Если в вашем файле учетных данных, как этот

development: 
    stripe_secret_key: 123
production:
    stripe_secret_key: 345
test:
    stripe_secret_key: 678

1-е решение:

Rails.application.credentials[Rails.env.to_sym][:stripe_secret_key]

2-е решение:

открыть application.rb файл и определить self.credentials метод

module ModuleName
    class Application < Rails::Application
        def self.credentials
            @credentials ||= Rails.application.credentials[Rails.env.to_sym]
        end
    end 
end

И используется

ModuleName.credentials[:stripe_secret_key]

Более подробную информацию см. ссылка

0 голосов
/ 12 июня 2019

Sampson Crowley в Rails-talk-списке:

для rails 5, просто вложите учетные данные среды под ключом для указанной среды

, тогда все, что вам нужно сделать при доступе к этой конфигурации, это добавитьсреда для стороны, которая использует конфигурацию, например:

credentials.yml.enc:

main_key: development: sub_key: value_key: 'development' production: sub_key: value_key: 'production'test: sub_key: value_key: 'test'

код:

my_credential = Rails.application.credentials.dig(:main_key, Rails.env.to_sym, :sub_key, :value_key)
0 голосов
/ 30 декабря 2018

Я считаю, что идея состоит не в том, чтобы в вашем файле учетных данных было несколько сред, а в том, чтобы иметь несколько файлов учетных данных.

Мы решили это с помощью credentials.dev.enc, credentials.production.enc и т. Д.

Затем мы загружаем определенный файл на конкретный сервер как часть процесса развертывания.

Это также позволяет вашим средам иметь независимые мастер-ключи и ключи шифрования, что снижает риски безопасности в вашей системе.

0 голосов
/ 10 июня 2019

Я нашел камень rails-env-credentials полезным для этого.Не уверен, насколько он будет совместим с будущей поддержкой Rails 6, но он отлично работает для моего приложения.

0 голосов
/ 06 декабря 2018

Хотя @dhh и @morgoth обещают добавить управление средой в Rails 6 , я решил свою задачу таким образом, и все выглядит хорошо, как работает:

# application.rb
class Application < Rails::Application
    if Rails.env.development?
        ENV["access_key_id"] = Rails.application.credentials.DEV_aws[:access_key_id]
        ENV["secret_access_key"] = Rails.application.credentials.DEV_aws[:secret_access_key]
        ENV["s3_bucket_name"] = Rails.application.credentials.DEV_aws[:s3_bucket_name]
    end
    if Rails.env.production?
        ENV["access_key_id"] = Rails.application.credentials.PROD_aws[:access_key_id]
        ***
    end
end

Все вна месте и зашифрованы

...