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

for*_*sth 5 symlink capistrano ruby-on-rails

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

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

你可以在这里看到capistrano日志:http: //img715.imageshack.us/img715/7803/capistranoproblemb.png

有没有其他人经历过这个或者可以帮助我解决它?

谢谢!

for*_*sth 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"
Run Code Online (Sandbox Code Playgroud)

  • 在最新的Capistrano中,它是`deploy:create_symlink`而不是`deploy:symlink`. (4认同)
  • 请将接受的答案更改为@knocte给出的答案.上面的kludge可能会起作用,但这是代码味道. (2认同)

kno*_*cte 6

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

我想会发生的事情是你遇到了这个可怕的卡皮斯特拉诺的错误.

在上班的路上,周围的错误是:不看latest_release面前的任务变量deploy发生.