web-dev-qa-db-ja.com

Rails 4.2はsecret_tokenを使用しますか?

Rails 4.2)での本番環境では、secret_key_baseとsecret_tokenの両方が必要ですか?どちらも設定しないと、次の例外メッセージが表示されます。

'本番環境'環境にsecret_tokensecret_key_baseがない場合は、これらの値をconfig/secrets.ymlに設定してください

4.2アップグレードガイド( http://railsapps.github.io/updating-Rails.html )は次のように述べています。

Rails newコマンドを使用して、新しいRailsアプリケーションを作成すると、一意の秘密鍵が生成され、config/initializers /secret_token.rbファイルに書き込まれます。

しかし、アプリを生成したときにそのようなファイルは作成されておらず、config /secrets.ymlにsecret_tokenへの参照がありません

エラーメッセージが間違っていて、secret_key_baseだけが必要だと思います。開発マシンで本番環境でアプリを実行すると、secret_key_baseだけで始まりますが、Engineyardでは、(環境変数を介した)secret_key_baseの設定が機能しません。それでもエラーが発生します。

10
J Plato

Engine Yardで発生している問題は、secret_key_base環境変数がデフォルトで(まだ)存在しないためです。それは私たちが取り組んでいることです。カスタムシェフを使用して、自分でそれを配置できます。詳細については、サポートチームにご相談ください。

実際に発生するエラーについては、新しいRails 4.2 app( "Rails new foo")をテストして、secret_token.rbが生成されているかどうかを確認しましたが、生成されていません。ここで必要なのはconfig/secrets.ymlを作成することであり、そのファイルは次のようになります。

development:
  secret_key_base: somekey

test:
  secret_key_base: someotherkey

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

さて、ENV ["SECRET_KEY_BASE"]が表示されたら、EngineYardに少しひねりが加えられています。まだ箱から出して提供していません。リポジトリが非公開である限り、そこに何かを自分でハードコーディングできます。それ以外の場合、カスタムchefを使用すると、秘密鍵ベースを作成し、それをアプリワーカープロセスの起動を担当するラッパースクリプトに配置することで、問題を解決できます(たとえば、プラットフォームのconfig/env.custom)。

お役に立てれば。

5

4.2は秘密鍵を使用し、投稿したリンクにはあなたが探している解決策があります。

秘密鍵がアクティブにならない環境では、rake secretを使用して秘密鍵を生成し、コンソールからの出力をconfig/initializers/secret_token.rbファイルに配置する必要があります(秘密鍵がない場合は作成できます。 t 1)。

secrets.ymlの使用を回避するオプションがあります。多くの人は、秘密情報を処理するために別の宝石/手順(例: figaro )を使用することを好みます。生活を簡素化するために、この情報をsecret_token.rbファイルに入れて先に進むか、状況を処理する他のさまざまな慣用的な方法を学ぶことができます。

2
Ecnalyr

少なくともRails 4.2.2でも同じエラーが発生しましたが、RailsユーザーのSECRET_KEY_BASEファイルに環境変数.bash_profileを設定すると、次の問題が解決しました。私なので、secret_tokenについてのビットは偽物のようです-おそらく、以前のバージョンからのホールドオーバーです。

rake secretにコマンドを実行してシークレットを生成し、ファイル.bash_profileで生成された文字列を次のように使用します。

export SECRET_KEY_BASE='the_output_of_the_rake_secret_command'
2
Teemu Leisti

最新バージョンのRailsがインストールされている新しいアプリを再生成することをお勧めします。

このファイルは私の最後のプロジェクトで自動生成されました:

# 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 `rake secret` to generate a secure secret key.

# Make sure the secrets in this file are kept private
# if you're sharing your code publicly.

development:
  secret_key_base: fooooo

test:
  secret_key_base: fooooo

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

また、生成されたファイルをrailsdiffサイトで比較することをお勧めします(例: http://railsdiff.org/4.1.10.rc2/4.2.1.rc2 )古いバージョンからアップグレードしているように聞こえます。

0