私は、devise gemを持つ小さなレールプロジェクトをDockerバージョンに移行しようとしています。説明のために(MWE)私はdevise-exampleを使用します。ドッキングウィンドウのすべてがなければDockerを使用して本番モードでDevise-Railsの例をデプロイ
は大丈夫です:
git clone git://github.com/RailsApps/rails-devise.git
cd rails-devise
bundle install
bundle exec rake db:migrate
rails s
今私はドッカーコンテナ内生産でこの例を実行します。したがって、 Dockerfile
,docker-compose.yml
および.env.web
を追加しました。助けるために
bundle exec rake secret
:秘密鍵を介して取得され
PORT=3000
SECRET_KEY_BASE=e69d022dcead6a7025f6f7d37cf540d5c53fd5a075826998418b2165a3138ff4e32b82a45feb338a61a2d1d81f677173025b514ebc315e1fc9cd7ad4ed80d145
DOMAIN_NAME=example.com
:アイデアは、ベストプラクティスに従うと、環境内のすべての秘密鍵とのconfigsが含まれている.env.web
ファイルを、すべての秘密を置くことですこの質問に答えて、私はすべてをこのリポジトリのフォークに入れました。私の問題を再現するには、これらのコマンドに
git clone https://github.com/patwie-stuff/rails-devise.git
cd rails-devise
docker-compose build
作品を実行することができますが、私は得た:
RUN RAILS_ENV=production bundle exec rake assets:precompile --trace
から
** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '28952e4c2a1372b9ff2ec6b46fbbe942fa192fac9192982313f692e7ff3fae6c9227a8b6fd0034b87e64ebefb757c854095cc4f3594f7254280697ddf98c47b8'
Please ensure you restarted your application after installing Devise or setting the key.
/usr/local/bundle/gems/devise-3.5.2/lib/devise/rails/routes.rb:475:in `raise_no_secret_key'
/usr/local/bundle/gems/devise-3.5.2/lib/devise/rails/routes.rb:209:in `devise_for'
/myapp/config/routes.rb:3:in `block in <top (required)>'
このエラーの結果デフォルトの動作は工夫がでレールのsecret_key_base
を使用していますと言いますデフォルト。この値は環境から取得されるため、.env.web
ファイルです。しかしそれはそこにある!どのように私は環境ファイルのsecret.ymlからものを保つことができます。
コメント解除のDockerfileでライン15,16と
docker-compose run web ruby test.rb
を実行するには、正しい結果a_production_secret_key
を与えます。
差異は「ドッカー作成」と「ドッカー作成実行ウェブテスト.rb」の間にありますか?明らかに、違いは構築時間と実行時間です。
しかし、生産のためにSECRET_KEY_BASE変数を処理するにはどうすればよいですか?私はDockerfileの中でこれをハードコーディングしたくありません。ここでベストプラクティスは何ですか?生産のためには、資産をプリコンパイルする必要があります。
SECRET_KEY_BASEにダミー値を設定できますか?私はDockerfileでハードコードされたダミー値を使用して良い気分にはなっていません。
私は同じ問題を抱えています... env.webではなく、ローカルのenvファイルを入れていますが。あなたはこれに対する答えを見つけましたか? 私が見つけた唯一の回避策は、プロダクション環境でconfig.assets.compile = trueを設定することです。これは間違いなくベストプラクティスではありません。 私はrakeアセットを実行できます:プロダクション環境内でプリコンパイルドッカーファイルではない – MrWater