1. ホーム
  2. ruby-on-rails

[解決済み] エラー「Missing `secret_key_base` for 'production' environment」を解決する方法 (Rails 4.1)

2022-04-21 02:05:08

質問

Rails 4.1を使用して、ゼロからRailsアプリケーションを作成しましたが、解決できない奇妙な問題に直面しています。

Herokuにアプリケーションをデプロイしようとすると、毎回500エラーが発生します。

Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`

secret.yml ファイルには、次のような設定があります。

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

Herokuでは、"を設定しました。 SECRET_KEY_BASE の結果を環境変数に代入しています。 rake secret コマンドを実行します。もし私が heroku config 正しい名前と値を持つ変数を見ることができます。

なぜこのエラーが発生するのでしょうか?

解決方法を教えてください。

私も同じ問題があり、本番サーバーにログインするたびに読み込む環境変数を作り ミニガイド を設定する手順を説明します。

Rails 4.1 と Unicorn v4.8.2 を使っていたのですが、アプリケーションをデプロイしようとするとうまく起動せず、その中の unicorn.log ファイルには、このようなエラーメッセージがありました。

app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)

調べてみると、Rails 4.1 で secret_key を読むと secrets.yml にあるファイルを exampleRailsProject/config/secrets.yml をクリックすると、次のようなものが表示されます。

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

つまり、Railsでは環境変数で secret_key_base を実行する必要があります。このエラーを解決するには、以下の手順に従って、本番サーバーでLinux(私の場合はUbuntu)用の環境変数を作成する必要があります。

  1. 本番サーバーのターミナルで以下を実行します。

    $ RAILS_ENV=production rake secret
    
    

    これは、文字と数字を含む大きな文字列を返します。これをコピーして、そのコードを GENERATED_CODE .

  2. サーバーにログイン

    • ルートユーザーでログインした場合、このファイルを見つけて編集してください。

      $ vi /etc/profile
      
      

      を使用してファイルの一番下に移動します。 シフト + G (大文字の"G")がviに含まれています。

      で環境変数を記述します。 GENERATED_CODE を押すと i でviに挿入します。必ずファイル末尾の改行で。

      $ export SECRET_KEY_BASE=GENERATED_CODE
      
      

      変更を保存して、ファイルを閉じるには エスケープ と入力し、" :x となります。 入力 で保存し、viで終了します。

    • しかし、通常のユーザーでログインした場合、仮に"とします。 example_user "このgistのために、あなたはこれらの他のファイルのいずれかを見つける必要があります。

      $ vi ~/.bash_profile
      $ vi ~/.bash_login
      $ vi ~/.profile
      
      

      これらのファイルは重要な順に並んでいます。つまり、最初のファイルさえあれば、他のファイルを編集する必要はないでしょう。もし、あなたのディレクトリに以下の2つのファイルがあったとします。 ~/.bash_profile~/.profile を書くだけです。 ~/.bash_profile Linuxはこの1つだけを読み、他は無視されるからです。

      次に、ファイルの最下部にある シフト + G をもう一度書き、環境変数に我々の GENERATED_CODE を使って i もう一度、ファイルの最後に改行を追加してください。

      $ export SECRET_KEY_BASE=GENERATED_CODE
      
      

      コードを書き終えたら、変更を保存してファイルを閉じます。 エスケープ をもう一度、" :x となります。 入る をクリックして保存し、終了します。

  3. Linuxでは、このコマンドで環境変数が正しく設定されていることを確認できます。

    $ printenv | grep SECRET_KEY_BASE
    
    

    で、あるいは

    $ echo $SECRET_KEY_BASE
    
    

    このコマンドを実行すると、すべてがうまくいっていれば GENERATED_CODE を実行します。最後に、すべての設定が完了したら、Unicornや他のツールでRailsアプリケーションを問題なくデプロイできるはずです。

シェルを閉じて本番サーバーに再ログインすると、この環境変数が設定されており、使用できるようになっています。

そして、これで終わりです この ミニガイド このエラーを解決するのに役立ちます。

免責事項: 私はLinuxやRailsのグルではないので、何か間違ったことやエラーが見つかったら、喜んで修正させていただきます。