2

我正在尝试使用 capistrano 进行部署,但是当我进行 cap deploy:update 时,它​​没有创建 /current 文件夹,这是错误,有什么想法吗?

executing "cd /home/adamtodd/apps/homebase/current && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile --trace"
servers: ["xx.xxx.xx.xxx"]
[xx.xxx.xx.xxx] executing command
 ** [out :: xx.xxx.xx.xxx] bash: line 0: cd: /home/adamtodd/apps/homebase/current: No such file or directory
4

3 回答 3

9

当我在首次部署时使用 Ben Curtis 解决方案进行资产预编译(assets:precompile 任务重新定义)时遇到了同样的问题(deploy:cold 没有帮助我)

简单的解决方法在这里

namespace :deploy do
  namespace :assets do
    task :precompile, :roles => :web, :except => { :no_release => true } do
      begin
        from = source.next_revision(current_revision) # <-- Fail here at first-time deploy because of current/REVISION absence
      rescue
        err_no = true
      end
      if err_no || 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
于 2012-11-15T15:32:25.590 回答
1

看起来您已经重新定义了 deploy:assets:precompile 任务,因为在 Capistrano 源代码中您可以看到它尝试 cd into releases/12345,而不是current

https://github.com/capistrano/capistrano/blob/master/lib/capistrano/recipes/deploy/assets.rb#L31-43

所以我会检查你的 deploy.rb 并删除重新定义的任务。

(我以同样的方式重新定义了任务,甚至添加了一个--tracelike you,但是我试图解决的任何问题都不再是问题,开箱即用的任务对我来说很好。如果我不得不猜测,我会说我们的自定义任务是RAILS_GROUPS=assets进入命令字符串的黑客,但 Capistrano 现在会自动处理,如果你检查链接的源代码,你可以看到。)

于 2012-10-22T15:33:26.630 回答
1

cap deploy:update通常只适用于已经部署过一次的应用程序,我假设你的情况没有发生,因为你没有current目录。

尝试做一个cap deploy:cold

于 2012-06-13T23:47:46.033 回答