超レアなケースですがRails3.2.13以前のRailsアプリをRuby2.0以上で動かさなければいけないときに、rake assets:precompile
してもJSのコードがプリコンパイルされないSprocketsの不具合があります。
具体的な現象
Rails3.2.13以前 + Ruby2.0系において、
//= require jquery //= require jquery_ujs
と、application.jsを定義しても、rake assets:precompile
後のファイルが
//= require jquery //= require jquery_ujs ;
となってしまい、jQueryが上手く読み込まれないといった現象が発生します。
そういうわけで
諸事情で今すぐのバージョンアップが難しいときのモンキーパッチがこちらになります。
こちらのコードを[RAILS_ROOT]/config/initializers
以下に配置すれば問題は解消します。
なんで?
- Ruby2.0から正規表現エンジンがOnigmoに変わったので、パースするための正規表現に影響が出た。
- Ruby2.0からprivateメソッドに対するrespond_to?の書き方が変わったので、Ruby1.9系までの書き方だと必ず
false
が返ってしまい、上手くSprocketsのディレクティブが読み込まれない結果になった。
でも普通の人は
ちゃんとRailsの最新版にバージョンアップすれば良いと思います。