私は単にメッセージを通過することはできません
「本番」環境の
secret_key_base
がありません。この文字列をRails credentials:edit
(ArgumentError)で設定します
ここにRails 5.2.0があります。 Ran EDITOR=vim Rails credentials:edit
および内部:
production:
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxx
保存して、ターミナルで:Rails_ENV=production Rails c
何か不足していますか?サーバーを再起動しましたが、同じ問題があります。開発モードでは問題ありません。
Secrets.ymlファイルをデフォルトのままにする
# config/secrets.yml
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Rails_ENV =生産SECRET_KEY_BASE = production_test_key Rails c
Rails 5.2.0では、実稼働環境用に追加のステージが必要です。
config.require_master_key = true # in config/environments/production.rb
それなしでは、Railsはまだ従来のsecret.yml
メカニズム(今のところ)にフォールバックします。
Engine YardのChristopher Rigor 簡潔な投稿を書いています 。関連する部分:
資格情報の読み取り
実稼働環境で資格情報を使用する場合は、
config/environments/production.rb
に以下を追加しますconfig.require_master_key = true
また、上下を見るのに良い読み物です。
注:@TomDoggが発見したように、Rails 5.2.1は再び異なるように見えるため、この回答は5.2.0にのみ適用される場合があります。
クレデンシャルファイルにproduction:
development:
およびtest:
環境タグがありません。このDHHの投稿の詳細: https://github.com/Rails/rails/pull/30067
だから直接書く
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxx
マスターキーとシークレットキーベースを混同しないでください。マスターキーは、資格情報で暗号化されたファイルを開くために使用されます。
以前の秘密システムに戻すことは解決策でもなければ、受け入れられる答えでもありません。
config/credentials.yml.enc:
development:
some_username: XXXXXXXXX
some_password: YYYYYYYYY
test:
some_username: XXXXXXXXX
some_password: YYYYYYYYY
production:
some_username: XXXXXXXXX
some_password: YYYYYYYYY
secret_key_base: ZZZZZZZZZ
# `secret_key_base:` must NOT be indented !
# It must be put at the very start of a new line.
# There is also no need for it in development or test environment,
# since there are no attacks to be expected.
また、すべてのYAMLインデント規則(つまり、2つのスペースのみ)を尊重していないことを確認して、このファイルの読み込みがサイレントに失敗するようにしてください。