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