rails3.1.0で、productionモードにてasset pipe lineを使うには、一般的には rake assets:precompile を利用すると思いますが(さもなくばエラーになります)、実行すると下記の用になります。
$ rake assets:precompile $ ls -la public/assets/ 合計 544 drwxrwxr-x 2 kj kj 4096 9月 6 01:33 . drwxrwxr-x 3 kj kj 4096 9月 6 01:33 .. -rw-rw-r-- 1 kj kj 96110 9月 6 01:27 application-2438fd50052a4a5b81204dc6fb.js -rw-rw-r-- 1 kj kj 33515 9月 6 01:27 application-2438fd50052a4a5b81204dc6fb.js.gz -rw-rw-r-- 1 kj kj 0 9月 6 01:27 application-4635849c44627859332fda6a01.css -rw-rw-r-- 1 kj kj 20 9月 6 01:27 application-4635849c44627859332fda6a01.css.gz -rw-rw-r-- 1 kj kj 91273 8月 15 22:49 jquery-ed8d29566738ad005e19fe1c2d.min.js -rw-rw-r-- 1 kj kj 32054 8月 15 22:49 jquery-ed8d29566738ad005e19fe1c2d.min.js.gz -rw-rw-r-- 1 kj kj 198431 8月 15 22:49 jquery-ui-2a28fc84ad0e0e47e46cbf901c.min.js -rw-rw-r-- 1 kj kj 50610 8月 15 22:49 jquery-ui-2a28fc84ad0e0e47e46cbf901c.min.js.gz -rw-rw-r-- 1 kj kj 318 9月 6 01:33 manifest.yml -rw-rw-r-- 1 kj kj 6646 9月 6 01:26 rails-a560b5a3a7be0808c5cd76a798.png上記にjqueryとjquery-uiが含まれている事が理解できません。application.jsの中にはjqueryが内包されています。またjquery-uiはSprocketsのディレクティブで指定もしていません。良くわからない挙動なので追跡してみました。
■原因
actionpack-3.1.0/lib/sprockets/assets.rake にdebuggerを仕込み動きを追いましたが、
26 config.assets.precompile.each do |path| 27 env.each_logical_path do |logical_path| 28 if path.is_a?(Regexp) 29 next unless path.match(logical_path) 30 else 31 next unless File.fnmatch(path.to_s, logical_path) 32 end 33 ...上記の28行目のpathは、config.assets.precompileの配列のメンバーですが、デフォルトでは
[ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]
になっています(railties-3.1.0/lib/rails/application/configuration.rb 38行目)
上記配列の一番目は、rails.png等jsやcss以外の為に存在しますが、このままではjquery.min.jsやjquery-ui.minjsも29行目でヒットしてしまうじゃないか!!!という事に気付きました。
■解決方法
直してやれ!と思いましたが既に問題になってました。よって
- 上記もうすぐ取り込まれそうなので3.1.1?を待つ
- とりあえずconfig/environments/production.rbで config.assets.precompile = [ /\.(?!js$|css$)\w+$/, /application.(css|js)$/ ] とする
■2011/09/11追記
解決されている様です。あるべき姿になった感じです! https://github.com/rails/rails/commit/082f53a3bca9dce70adcf41094e246d2c9fed934
0 件のコメント:
コメントを投稿