概要
Rails5.2でconfig/secrets.ymlの代わりに入ったconfig/credentials.yml.encだが
環境毎に変える機能がなかったりして、外部APIへの接続情報をstaging系とproduction系で分ける、みたいなことができない。
また、Deviseが何をするにもsecret_keyを要求するせいで、
master.keyを作り直そうとして、master.keyとcredentials.yml.encを削除してから
bin/rails credentials:edit
を叩くとエラーを吐いてしまい、スタックしてしまう。
もういっそ、Rails5.1時代のsecrets.ymlと同じ状態で使いたい。
結果
こうなりました。
ちゃんとENVも展開されます。
config/application.rb
module XXXXX
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2
config.require_master_key = false
config.x.secrets = ActiveSupport::InheritableOptions.new(config_for(:secrets))
config.secret_token = config.x.secrets.secret_key_base
end
end
config/secrets.yml
# Be sure to restart your server when you modify this file.
# Your secret key is used for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
# You can use `rails secret` to generate a secure secret key.
# Make sure the secrets in this file are kept private
# if you're sharing your code publicly.
# Shared secrets are available across all environments.
# shared:
# api_key: a1B2c3D4e5F6
# Environmental secrets are only available for that specific environment.
development:
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
test:
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Do not keep production secrets in the unencrypted secrets file.
# Instead, either read values from the environment.
# Or, use `bin/rails secrets:setup` to configure encrypted secrets
# and move the `production:` environment over there.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
secretの部分は
$ bin/rails secret
で生成すること。