25

我有一个正在运行的 Rails 3.2.1 应用程序,我正在通过 Capistrano 部署deploy/assets它,它运行deploy:assets:precompile任务。

一切都很好,除了编译本身真的很慢。我没有那么多 CSS 和 JavaScript(总共大约 8200 行)。

编译资产一般需要 1-3 分钟左右,约占整个部署时间的 90%。

有没有办法优化这个?也许使用不同的程序来编译资产或以某种方式优化它?

我在 1.9.2-p290、Rails 3.2.1 上的 Linode 512 上运行该应用程序,therubyracer如果有任何相关性,则使用 gem。

4

2 回答 2

21

这不是让它运行得更快的答案,但就“不同的程序”而言,您可以告诉 Capistrano 仅在您实际对资产进行任何更改时才预编译资产。您可能想要执行assets:precompile类似这样的自定义任务,该任务将查看现有代码和新部署代码之间的 git 日志。对我来说,这很好用,现在我只需要在更新资产时处理缓慢的部署:

namespace :deploy do
  namespace :assets do
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0
        run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile}
      else
        logger.info "Skipping asset pre-compilation because there were no asset changes"
      end
    end
  end
end

资料来源:http ://www.bencurtis.com/2011/12/skipping-asset-compilation-with-capistrano/

于 2012-02-15T15:00:24.227 回答
16

我刚刚在 Rails 中编写了一个 gem 来解决这个问题,称为turbo-sprockets-rails3。它仅通过重新编译更改的文件来加快您assets:precompile的速度,并且只编译一次即可生成所有资产。Capistrano 开箱即用,因为您的资产目录在版本之间共享。

如果您能帮我测试一下turbo-sprockets-rails3 gem,那就太好了,如果您有任何问题,请告诉我。

于 2012-10-03T00:13:09.117 回答