我正在使用capistrano来部署我的Ruby on Rails项目。我在Dreamhost VPS上,几个星期前,没有改变capistrano或乘客,我开始遇到一个奇怪的部署问题:
每次capistrano部署我的应用程序时,一切都正常,除了deploy:symlink(默认调用),它应该将“当前”目录指向最新版本。虽然新版本已正确部署到“版本”目录,但问题是“当前”符号链接始终设置为先前版本而不是新版本。所以我可以部署应用程序,但我必须连续两次运行部署。
您可以在此处查看capistrano日志: http://img715.imageshack.us/img715/7803/capistranoproblemb.png
有没有其他人经历过此事或可以帮我解决?
谢谢!
答案 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
变量。