部署:capistrano上的符号链接将“当前”目录指向先前版本

时间:2010-06-29 14:08:45

标签: ruby-on-rails capistrano symlink

我正在使用capistrano来部署我的Ruby on Rails项目。我在Dreamhost VPS上,几个星期前,没有改变capistrano或乘客,我开始遇到一个奇怪的部署问题:

每次capistrano部署我的应用程序时,一切都正常,除了deploy:symlink(默认调用),它应该将“当前”目录指向最新版本。虽然新版本已正确部署到“版本”目录,但问题是“当前”符号链接始终设置为先前版本而不是新版本。所以我可以部署应用程序,但我必须连续两次运行部署。

您可以在此处查看capistrano日志: http://img715.imageshack.us/img715/7803/capistranoproblemb.png

有没有其他人经历过此事或可以帮我解决?

谢谢!

2 个答案:

答案 0 :(得分:6)

我通过一个额外的部署任务来解决这个问题,该任务使用不同的内部变量名重新创建符号链接,并使用最新版本的正确路径(release_path而不是latest_path或类似的东西)。


namespace :deploy do
  desc "Recreate symlink"
  task :resymlink, :roles => :app do
    run "rm -f #{current_path} && ln -s #{release_path} #{current_path}"
  end
end

after "deploy:create_symlink", "deploy:resymlink", "deploy:update_crontab"

答案 1 :(得分:6)

我认为@ foresth的答案不是一个好的解决方案。

我认为发生的事情是你遇到this horrible bug capistrano。

解决这个问题的方法如下:请勿在任务latest_release发生之前阅读deploy变量