0

私は、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でハードコードされたダミー値を使用して良い気分にはなっていません。

+0

私は同じ問題を抱えています... env.webではなく、ローカルのenvファイルを入れていますが。あなたはこれに対する答えを見つけましたか? 私が見つけた唯一の回避策は、プロダクション環境でconfig.assets.compile = trueを設定することです。これは間違いなくベストプラクティスではありません。 私はrakeアセットを実行できます:プロダクション環境内でプリコンパイルドッカーファイルではない – MrWater

答えて

0

数時間と多くの参照の後、私はついに動作するものを見つけました。

最も乾燥したコードは、http://equinox.one/blog/2016/04/20/Docker-with-Ruby-on-Rails-in-development-and-production/のソリューションを使用しています。ここから

# Set Rails to run in production 
ENV RAILS_ENV production 
ENV RACK_ENV production 

RUN bundle exec rake SECRET_KEY_BASE=dummytoken assets:precompile 

--traceプリコンパイル:https://nickjanetakis.com/blog/dockerize-a-rails-5-postgres-redis-sidekiq-action-cable-app-with-docker-compose 私は資産の前に値を理解ちょうどあなたのDockerfile

RUN RAILS_ENV =生産バンドルのexecすくい資産に置き換える プリコンパイルは、有効な構文を持つ限り、ダミーにすることができます。

EDIT:

上記の溶液は、私は資産がまだ資産は生産にロードされていませんでした、プリコンパイル持つことができますが。

最後に、私はこの回答で見たようにrails 12 factor gemを使用して終了しました:https://stackoverflow.com/a/36441251/1461972、そしてそれはすべて成功しました。

関連する問題