Rails 4:如何只编译已更改的资产?

时间:2013-10-05 20:48:15

标签: ruby-on-rails ruby-on-rails-4 asset-pipeline

对于Rails 3,this questionturbo-sprockets-rails3看起来很棒。

对于Rails 4,似乎some controversy是否已修复此问题。

我目前正在使用Rails 4,似乎因为Capistrano deploy:assets:update_asset_mtimes触及所有资产,deploy:assets:precompile同样会重新编译所有资产。重新编译是我cap deploy中最长的一步。

理想情况下,这应该由一些基于校验和的清单系统替换,以便只重新编译那些已经实际更改(或依赖于已更改的资产)的资产。

最好的方法是什么? (假设我们仍在服务器上,而不是开发机器上。)

3 个答案:

答案 0 :(得分:2)

这是来自codeclimate的人们关于此的一篇很棒的博客文章。我已经看过了它,但没有完成生产中的步骤。

http://blog.codeclimate.com/blog/2013/10/02/high-speed-rails-deploys-with-git/

答案 1 :(得分:2)

这个家伙适合Capistrano 3.适合我。 https://coderwall.com/p/aridag

答案 2 :(得分:1)

https://github.com/capistrano/capistrano/issues/478讨论了这个问题 似乎没问题的解决方案就是停用触摸功能。在上面的问题中,有人谈到了一个配置变量用于此,但我找不到任何代码引用。相反,我们现在只是覆盖任务。

namespace :deploy do
  namespace :assets do
    task :update_asset_mtimes, :roles => lambda { assets_role }, :except => { :no_release => true } do
    end
  end
end

注意:这仅适用于capistrano版本2.我不知道版本3是否仍然使用相同的任务。