web-dev-qa-db-ja.com

railsに本番secret_key_baseがありません

私は最近アプリをデプロイしましたが、本番secret_key_baseがないために内部サーバーエラーが発生しました。数時間のテストの後、2つの方法でこの問題を解決することができました。

方法1:

rake secretで新しいsecret_keyを生成し、<%= ENV["SECRET_KEY_BASE"] %>secrets.ymlに置き換えました。アプリを再度展開し、今回は機能しました。 しかし、この方法は間違っていると思います。

方法2:

rake secretを変更せずに、environments/production.rbで新しいsecret_keyを生成し、config.secret_key_base = 'd1f4810e662acf46a33960e3aa5bd0************************のようなsecrets.ymlに追加しました(デフォルトはproduction: <%= ENV["SECRET_KEY_BASE"] %>)。アプリを再度展開し、正常に動作します。

私の質問:

  1. どの方法が最適ですか?
  2. 2番目の方法が正しい場合、なぜRailsはデフォルトでproduction.rbにsecret_key_baseを生成しないのですか?
  3. それを行う他の方法はありますか?
31
user3631047

私はついにcorrentメソッドを見つけました。問題のメソッドはどれも正しいものではありません。

正しい方法:

私たち自身が秘密鍵を生成する必要があります(rake secret)次に、コマンドプロンプトから次のコマンドを実行して、SECRET_KEY_BASEの環境変数を作成します。

rhc set-env SECRET_KEY_BASE=3dc8b0885b3043c0e38aa2e1dc64******************** -a myapp

このコマンドを実行した後、SSHを介してサーバーに接続し、envを実行すると、リストにSECRET_KEY_BASEが表示されます。

アプリを再起動してくださいrhc app-stop myappおよびrhc app-start myapp、その後、あなたは行ってもいいです。

30
user3631047

通常のUbuntuマシンを使用している場合は、export SECRET_KEY_BASE=" <<< output from rake secret here >>> "あなたの~/.bashrc

実行source ~/.bashrcそして、アプリを再起動します。

5

もう少し安全なオプションがあり、それをApache/Nginx構成ファイルに追加します。私はApacheを使用していますが、使用したばかりです:

SetEnv SECRET_KEY_BASE my_secret

次に、secrets.ymlファイルを次のように設定したままにします。production:<%= ENV ["SECRET_KEY_BASE"]%>

本番Webサーバーの場合、.bashrcファイルが実行され、ENV変数が設定されると想定するのが有効かどうかはわかりませんが、この方法で確実に設定できると思います。私は専門家ではないので、私に指摘された良いアイデアではないリスクや理由があるのです。

3
Nick Weavers