<dir> / releases / * / assets_manifest中没有显示。* Capistrano </dir>

时间:2013-05-23 21:53:57

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

我刚注意到我在cap deploy上收到此错误:

No manifests in <dir>/releases/*/assets_manifest.*

这是cleanup任务的一部分,我在添加任务以有条件地预编译资产后才开始获取它:

#precompile assets only when needed
  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

这是一个我需要关注的错误吗?

Rails 3.2.13

Capistrano 2.15.4

1 个答案:

答案 0 :(得分:4)

使用capistrano进行部署时,每个版本都有一个assets_manifest文件,其中列出了该版本所需的所有资产。

当您运行清理时,capistrano会聚合显示在任何版本的assets_manifest文件的任意中的所有文件,并删除所有未显示的资产在他们中,他们比expire_assets_after年长。

显然,您的某个部署没有资产更改,因此assets:precompile未运行,此版本目录现在错过了capistrano在其清理任务中查找的assets_manifest文件。

如果它停止部署,那么你显然应该关注它。否则,我会做一些测试,看看资产确实正在被正确清理,并在以后修复此错误。

顺便说一下 - 为了解决你的问题,你可能不得不改变capistrano的clean_expired任务。 您可以找到exact code here