Ruby on rails 部署:capistrano上的符号链接指向;“当前”;以前版本的目录

Ruby on rails 部署:capistrano上的符号链接指向;“当前”;以前版本的目录,ruby-on-rails,capistrano,symlink,Ruby On Rails,Capistrano,Symlink,我正在使用capistrano部署我的RubyonRails项目。我在Dreamhost VPS上,几周前,capistrano或passenger没有变化,我开始在部署时遇到一个奇怪的问题: 每次capistrano部署我的应用程序时,除了deploy:symlink(默认情况下称为deploy)应该将“当前”目录指向最新版本之外,一切都正常。尽管新版本已正确部署到“releases”目录,但问题是“current”符号链接始终设置为previous release,而不是新版本。因此,我可以

我正在使用capistrano部署我的RubyonRails项目。我在Dreamhost VPS上,几周前,capistrano或passenger没有变化,我开始在部署时遇到一个奇怪的问题:

每次capistrano部署我的应用程序时,除了deploy:symlink(默认情况下称为deploy)应该将“当前”目录指向最新版本之外,一切都正常。尽管新版本已正确部署到“releases”目录,但问题是“current”符号链接始终设置为previous release,而不是新版本。因此,我可以部署应用程序,但我始终必须连续运行部署两次

您可以在此处查看capistrano日志:

以前有没有其他人经历过这种情况,或者可以帮助我解决它


谢谢

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


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

我想发生的是你正在体验卡皮斯特拉诺


解决此错误的方法如下:在任务
deploy
发生之前,不要阅读
latest\u release
变量。在最新的Capistrano中,它是
deploy:create\u symlink
而不是
deploy:symlink
。请将接受的答案更改为@knocte给出的答案。上面的乱七八糟可能行得通,但这是一种代码味道。@JellicleCat:你使用的是什么版本的capistrano?@knocte:我再也无法访问所讨论的工作站了,但我猜它是v2.X。这应该是公认的答案。根据这个错误调整我的自定义任务解决了这个问题。@brendan:你用什么版本的capistrano复制了这个错误?他们问我,在我链接的github问题中…看起来是2.15.4@knocte@brendan:谢谢,你能用3.x复制它吗?我用3.x随机遇到这个问题,但我根本没有使用最新的发布变量。foresth的答案可能是一种代码味道,但这是我目前唯一能确保我的符号链接在每次部署中都正确的方法。

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"