productionで実行してみた
Railsチュートリアル、第3版でCloud9を使うようになったけど 勉強がてらローカル環境(RubyMine)で作り直してる。
で、10章まで終わってproduction環境でメール送信を試すために下記コマンドを実行。
$ bundle exec rails s -e production
localhost:3000にアクセス。
環境変数エラー
はい、エラー。
環境変数がないのね。
$ bundle exec rake secret d01383c....a9d419d(ながーい文字列が表示されるのでコピー) $ export SECRET_KEY_BASE=d01383c....a9d419d $ bundle exec rails s -e production
localhost:3000にアクセス。
CSSが無い…
log/production.logを見ると
I, [2015-11-08T00:39:05.199573 #78762] INFO -- : Started GET "/assets/rails-c094bc3a4bf50e5bb477109e5cb0d213af27ad75b481c4df249f50974dbeefe6.png" for ::1 at 2015-11-08 00:39:05 +0900 F, [2015-11-08T00:39:05.200579 #78762] FATAL -- : ActionController::RoutingError (No route matches [GET] "/assets/rails-c094bc3a4bf50e5bb477109e5cb0d213af27ad75b481c4df249f50974dbeefe6.png"):
No route matches!!!
なんでや。developmentでは動くのに。
ぐぐったらこんな記事出てきた。
$ RAILS_ENV=production bundle exec rake assets:precompile
をしてから config/environments/production.rb の config.serve_static_files を true にしろって?
動いた
rake assets:precompileが必要なのはわかるけどそのコマンドにRAILS_ENVを付ける理由がよくわからん。 あとserve_static_filesは何なのかさっぱり分からん。
まとめ
ローカル環境でのproduction実行には
config/environments/production.rb の config.serve_static_files を true にする。
下記コマンドで実行する。
$ bundle exec rake secret d01383c....a9d419d(ながーい文字列が表示されるのでコピー) $ export SECRET_KEY_BASE=d01383c....a9d419d $ RAILS_ENV=production bundle exec rake assets:precompile $ bundle exec rails s -e production
宿題
- rake assets:precompile に RAILS_ENV が必要な理由
- config.serve_static_files の意味を知る