我注意到我的资产似乎被编译了两次,这大大减慢了我的部署速度,因为这一步是最耗时的部分:
~/projects/rewportal(mapwidget ✔) rake assets:precompile /home/ruy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/ruy/.rvm/gems/ruby-1.9.3-p194@rewportal/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb AssetSync: Syncing. Using: Directory Search of /home/ruy/projects/rewportal/public/assets Uploading: assets/application-5170f52c1dd49cb382d5135bee01d75e.js [...] Fetching files to flag for delete Flagging 8 file(s) for deletion Deleting: assets/active_admin-4ce46d089d4b0080e87c9abcb6fa6c97.css [...] AssetSync: Done.
这是正常吗?
当我预编译到其他环境(非生产)时,我可以看到每个资产的详细编译两次:
~/projects/rewportal(mapwidget ✔) rake RAILS_ENV=qa assets:precompile --trace ** Invoke assets:precompile (first_time) ** Execute assets:precompile /home/ruy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/ruy/.rvm/gems/ruby-1.9.3-p194@rewportal/bin/rake assets:precompile:all RAILS_ENV=qa RAILS_GROUPS=assets --trace ** Invoke assets:precompile:all (first_time) ** Execute assets:precompile:all ** Invoke assets:precompile:primary (first_time) ** Invoke assets:environment (first_time) ** Execute assets:environment AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb ** Invoke tmp:cache:clear (first_time) ** Execute tmp:cache:clear ** Execute assets:precompile:primary Compiled gmaps4rails/gmaps4rails.base.js (141ms) (pid 8480) Compiled gmaps4rails/gmaps4rails.googlemaps.js (148ms) (pid 8480) [...] Compiled active_admin.css (1299ms) (pid 8480) Compiled active_admin/print.css (113ms) (pid 8480) ** Invoke assets:precompile:nondigest (first_time) ** Invoke assets:environment (first_time) ** Execute assets:environment AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb ** Invoke tmp:cache:clear (first_time) ** Execute tmp:cache:clear ** Execute assets:precompile:nondigest Compiled gmaps4rails/gmaps4rails.base.js (133ms) (pid 8480) Compiled gmaps4rails/gmaps4rails.googlemaps.js (133ms) (pid 8480) [...] Compiled active_admin.css (1290ms) (pid 8480) Compiled active_admin/print.css (116ms) (pid 8480) AssetSync: Syncing. Using: Directory Search of /home/ruy/projects/rewportal/public/assets Uploading: assets/active_admin-d05b61ab8366b74eabc9074d3e60fe82.css.gz [...] Fetching files to flag for delete Flagging 6 file(s) for deletion Deleting: assets/active_admin-ec90e7d9a9f45f14d1387f58fa1452b4.css [...] AssetSync: Done.
我的application.rb具有以下内容:
config.assets.precompile += %w( active_admin/print.css active_admin.css active_admin.js admin.js admin.css html5shiv.js )
想法?
解决方法
默认情况下,Rails 3编译一次以生成指纹资产,一次生成非指纹资产(指纹的资产在文件名中具有MD5哈希).
您可以使用turbo-sprockets-rails3 gem从一个编译创建两者.
在Rails 4中,这个功能被提取到sprockets-rails gem中,行为被改变了,所以在Rails 4中不会发生双重编译.