私は最近アプリをデプロイしましたが、本番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"] %>
)。アプリを再度展開し、正常に動作します。
私の質問:
私はついに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
、その後、あなたは行ってもいいです。
通常のUbuntuマシンを使用している場合は、export SECRET_KEY_BASE=" <<< output from rake secret here >>> "
あなたの~/.bashrc
。
実行source ~/.bashrc
そして、アプリを再起動します。
もう少し安全なオプションがあり、それをApache/Nginx構成ファイルに追加します。私はApacheを使用していますが、使用したばかりです:
SetEnv SECRET_KEY_BASE my_secret
次に、secrets.ymlファイルを次のように設定したままにします。production:<%= ENV ["SECRET_KEY_BASE"]%>
本番Webサーバーの場合、.bashrcファイルが実行され、ENV変数が設定されると想定するのが有効かどうかはわかりませんが、この方法で確実に設定できると思います。私は専門家ではないので、私に指摘された良いアイデアではないリスクや理由があるのです。