Rails を production モードで起動する
development
モードと同じようにして、Rails
をproduction
モードで下記のように起動します。内蔵サーバのPuma
の起動です。
$ rails server -e production
ここでエラーが出てしまった場合(そもそもサーバが正常に起動しない場合)は以下の記事に詳しくまとまっていますのでご覧ください。下記記事中のWEBrick
という名称は以前のデフォルトの内蔵サーバの名称ですので適宜読み替えましょう。
ここで問題とするのは、サーバは正常に起動したにも関わらず、アクセスをすると 500 エラー が出てしまう場合の対処方法です。
まずはログを確認
エラーが出た場合はまずエラーメッセージ(ログ)を確認します。モニタの前でコードをパラパラ眺めながら、ググって書き換えてあーでもないこーでもないと試行錯誤する前に、とにかくログです。log/production.log
を見ます。
すると以下のような記録が残されていました。
I, [2017-06-14T11:00:13.349888 #2620] INFO -- : [2b9aae88-2e89-40d5-9259-6ec701fb019a] Completed 500 Internal Server Error in 14ms F, [2017-06-14T11:00:13.350882 #2620] FATAL -- : [2b9aae88-2e89-40d5-9259-6ec701fb019a] F, [2017-06-14T11:00:13.351004 #2620] FATAL -- : [2b9aae88-2e89-40d5-9259-6ec701fb019a] ActionView::Template::Error (The asset "foobar_logo" is not present in the asset pipeline.): F, [2017-06-14T11:00:13.351231 #2620] FATAL -- : [2b9aae88-2e89-40d5-9259-6ec701fb019a] 33: [2b9aae88-2e89-40d5-9259-6ec701fb019a] 34: <div class="container"> [2b9aae88-2e89-40d5-9259-6ec701fb019a] 35: <div class="text-center"> [2b9aae88-2e89-40d5-9259-6ec701fb019a] 36: <%= link_to image_tag('foobar_logo'), '#' %> [2b9aae88-2e89-40d5-9259-6ec701fb019a] 37: </div> [2b9aae88-2e89-40d5-9259-6ec701fb019a] 38: [2b9aae88-2e89-40d5-9259-6ec701fb019a] 39: <div class="row"> F, [2017-06-14T11:00:13.351279 #2620] FATAL -- : [2b9aae88-2e89-40d5-9259-6ec701fb019a] F, [2017-06-14T11:00:13.351330 #2620] FATAL -- : [2b9aae88-2e89-40d5-9259-6ec701fb019a] app/views/foobar/index.html.erb:36:in `_app_views_foobar_index_html_erb__2581585410400794985_47417416281840'
image_tag('foobar_logo')
で指定している画像ファイルについて、The asset "foobar_logo" is not present in the asset pipeline.
と怒られているのが分かります。この問題を解決するには以下の手順を踏みましょう。
assets を precompile する*1
以下のようにします(Rails 5)。
$ rails assets:precompile
config のproduction.rb
ファイル中のconfig.assets.compile
の値をtrue
にする
config/environments/production.rb
ファイルの中に、config.assets.compile
という設定項目があります。デフォルトでfalse
となっているところ、true
に変更します。
サーバを再起動する
サーバを再起動しましょう。これで 500 エラー が解消されたはずです!
$ rails server -e production
参考ページ
以下のページが参考になりました。ありがとうございます。
各種バージョン
Rails version: 5.1.1 Ruby version: 2.4.1 (x86_64-linux)
*1:これは必須ではない