Symfony Capifony deploy针对以前的版本运行一些命令

Symfony Capifony deploy针对以前的版本运行一些命令,symfony,capifony,Symfony,Capifony,我正在执行Capifony部署。但是,我注意到Capifony的内置命令是针对以前的版本运行的,而我的自定义命令则正确地针对当前版本 例如,如果我运行cap-d staging deploy,我会看到一些命令输出如下(添加了换行符): 你会看到,这是指我以前的版本-从2013年开始 我还看到了引用此新版本文件夹的命令(从2014年起): 在我的命令中,我使用{release\u path}变量,而查看Capifony的代码,它使用{latest\u release}。但显然我不能改变Capifo

我正在执行Capifony部署。但是,我注意到Capifony的内置命令是针对以前的版本运行的,而我的自定义命令则正确地针对当前版本

例如,如果我运行
cap-d staging deploy
,我会看到一些命令输出如下(添加了换行符):

你会看到,这是指我以前的版本-从2013年开始

我还看到了引用此新版本文件夹的命令(从2014年起):

在我的命令中,我使用
{release\u path}
变量,而查看Capifony的代码,它使用
{latest\u release}
。但显然我不能改变Capifony的密码

谈到了一些类似的东西,但我不认为这真的有帮助,因为我同样不能更改Capifony的代码

如果我删除服务器上的
releases
文件夹,我会遇到类似的问题-
{latest\u release}
没有任何值,因此它会尝试创建文件夹
/app/cache
(因为代码类似于
mkdir-p{latest\u release}/app/cache

(假设我没有删除
current
symlink和
release
文件夹,我看到的具体错误是当它无法复制供应商时:
cp:无法将目录/home/myproj/current/vendor复制到自身中
。然而,如果它认为新版本实际上是上一个版本,这只是更大问题的症状第一,这解释了为什么
current
也指向那里!)


有什么想法吗?我很乐意提供我的
deploy.rb
staging.rb
(我使用的是多级扩展)的摘录,但我并不只是想把整件事都放进去,所以让我知道你感兴趣的是什么!谢谢你,我终于弄清了这个问题

我在部署之前设置了一个要运行的步骤:

before "deploy", "maintenance:enable"
此维护步骤(正确)在现有站点上设置维护模式(在上面的示例中,是2013年款)

但是,维护任务通过使用
最新版本
变量引用了以前的版本。由于该步骤在部署之前运行,
最新版本
确实引用了2013版本。但是,一旦使用了
最新版本
,其值将为部署运行的其余部分设置-因此它仍然设置为2013版

因此,我通过更改维护代码来解决这个问题,使其不使用
最新版本
变量。我改为使用
当前版本
(似乎没有这种副作用)但是,另一种方法是定义您自己的变量,该变量的取值方式与最新发布的
相同:

set :prev_release, exists?(:deploy_timestamped) ? release_path : current_release
我通过查看Capistrano代码了解了最新发布的
是如何设置的。在我的环境中,我可以通过执行
bundle show Capistrano
(因为它是与bundler一起安装的),找到这一点,但其他设置的方法会有所不同


尽管我的问题的原因非常明确,但我的方法可能会帮助其他人:我按照以下步骤创建了一个完全普通的部署,并逐渐添加了旧部署中的功能,直到它崩溃!

此后我还尝试了一些其他事情:重新安装capistrano&capifony没有帮助,部署到entir也没有帮助ely刚创建的托管帐户(我在那里得到了上面提到的
/app/cache
创建错误,因为没有以前的版本)。哦,我同事机器上的一份新的回购协议也显示了同样的行为:-(
before "deploy", "maintenance:enable"
set :prev_release, exists?(:deploy_timestamped) ? release_path : current_release