2015年4月15日水曜日

rails4 - Asset filtered out and will not be servedの罠と回避方法 -

環境

  • rails4.1.2

事象と調査

rails4.1.2でwebアプリを作成していると、"Asset filtered out and will not be served"が発生しました。

このエラーをググって調査したところ、

config/environments/development.rbを

config.assets.raise_runtime_errors = false

に変更すればよいという情報を発見しました。

残念ながら、この修正方法はNGです。
確かにこれなら開発を続けることは可能ですが、この修正方法には致命的な弱点があります。

それは、本番環境でアセットパイプラインを利用している場合、cssやjsが読み込めないエラーが発生する可能性が高いことです。

rails公式サイトのアセットパイプラインの説明には以下のように記載されています。


config.assets.raise_runtime_errors = true

このオプションがtrueになっていると、アプリケーションのアセットがconfig.assets.precompileに記載されているとおりにすべて読み込まれているかどうかをチェックします。

つまり、本番環境でアセットパイプラインを利用するWEBアプリの場合(WEB APIを作成する場合は除く)は


config.assets.raise_runtime_errors = false

で開発を行ってはいけません。

当然ですよね。アセットパイプラインを使うのに、アセットパイプラインが有効でない状態で開発を行えば、本番モードでcssやjsが読み込めないエラーが発生する可能性は高くなります。

開発者と本番環境構築の作業者が別で、本番環境構築者が開発と本番の環境の差異を埋めるなら問題はありません。しかし、railsで開発する場合は、開発者が本番サーバーのアプリビルドまで担当することが多いのではないでしょうか。開発と本番の環境は、極力差をなくすべきです。

他にも


config.assets.debug = false

config.assets.digest = true

の設定は、開発環境でも有効にしておくべきです。

そうしないと、開発環境で全てのチェックが終わっても、本番のアセットパイプラインでcssとjsが反映されてないというエラーが発生し、泣く泣く修正作業をすることになります。

"Asset filtered out and will not be served"修正方法

というわけで"Asset filtered out and will not be served"の修正は、開発環境でもアセットパイプラインが有効な設定をしたうえで、assets.rbに


Rails.application.config.assets.precompile += %w( xxxxxx.min.css )

と記載すると良いでしょう。ファイルが増えると冗長になりますが、ひと目で確認できるのは利点です。
ファイル修正後は、サーバーの再起動も忘れずに!!

以上

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...