assetsパイプライン動作確認

2013/09/03 20:37

railsをproductionで動かしたときにassetsの資源がとれなくてはまったのでまとめてみました。

前提条件

  • ruby 2.0
  • rails 4.0
  • 一回実行するたびに実行結果をクリアするために下記のコマンドを実行
    rake tmp:clear
    rm -rf public/assets
  • stylesheet_link_tag と javascript_include_tag を使用する

検証パターン

  1. config.serve_static_assets の確認
  2. config.assets.compile の確認
  3. rake assets:precompile の実行

これら4つの検証パターンを中心に確認してみます。
まずはパターンの組み合わせで気になっていたパターンを表にしてみました。

No. 1. 2. 3.
1 false false 実行しない
2 false false 実行する 
3 true false 実行しない
4 true false 実行する 
5 true true 実行しない
6 true true 実行する 
7 false true 実行しない
8 false true 実行する 

作るcssとjavascriptはapplication.cssおよびjsとadd.cssおよびjsとふたつ使ってみます。

No.1、No.3
  • /stylesheets/application.css と /javascripts/application.js を取得しにいってる
    コンソールに取得エラー表示
  • /stylesheets/add.css と /javascripts/add.js を取得しにいってる
    コンソールに取得エラー表示
No.2
  • /assets/application-xxxxx.js と /assets/application-xxxxx.css を取得しにいってる
    コンソールに取得エラー表示
  • /stylesheets/add.css と /javascripts/add.js を取得しにいってる
    コンソールに取得エラー表示
No.4
  • /assets/application-xxxxx.js と /assets/application-xxxxx.css を取得しにいってる
    js、cssともに正常に取得
    ただしapplication.cssとapplication.jsでrequireしているファイルは修正したら都度コンパイルしないと反映されない
  • /stylesheets/add.css と /javascripts/add.js を取得しにいってる
    コンソールに取得エラー表示
No.5、No.6、No.7、No.8
  • /assets/application-xxxxx.js と /assets/application-xxxxx.css を取得しにいってる
    js、cssともに正常に取得
  • /assets/add-xxxxx.css と /assets/add-xxxxx.js を取得しにいってる
    js、cssともに正常に取得

まとめ

結果を見るとコンパイルのし忘れなくほぼ基本設定でいける No.7 の

  • config.serve_static_assets = false
  • config.assets.compile = true
  • rake assets:precompile は実行しない

が一番ベストに感じました。
ただしコンパイルが実行時に行われるためコンパイルエラーのリスクや実行時の負荷が発生します。

そこが気になる人は No.6 の

  • config.serve_static_assets = true
  • config.assets.compile = true
  • rake assets:precompile は実行する

がいいように思います。
ただ個人的にserve_static_assetsを開放するのはapp/assetsとpublic/assetsの2重管理になってしまってあまりきれいじゃない気がします。

No.1からNo.4はassetsを使わない人向けの設定になります。
もっと言うとNo.1とNo.2は静的資産をrailsでは管理せずwebサーバにゆだねた設定になります。

assetsパイプラインは他にもいろいろオプションがあるのでそのあたりをもうちょっと検証すればもっといいやり方があるかもしれません。