2014-10-10 47 views
1

我最近更新了我的应用程序,以便为其所有依赖项使用作曲家。作为其中的一部分,我已经更新了我的部署脚本 - 一组Grunt任务和一个批处理文件 - 在执行“git pull”之后包含“composer update”。在Windows.bat文件中运行“作曲家更新”

但是,我发现虽然作曲家更新成功运行,但该行后面的其余批处理文件中没有任何命令运行。如果我将“作曲家更新”一行写出来,其他所有内容都可以正常运行(但当然,我冒着过时/缺少依赖关系的风险)。

编辑: 完整的.bat文件。如果没有作曲家更新行,它将完全运行 - 它会跳到部署过程的下一部分。

这将在\ versions \中创建一个新的带日期戳记的文件夹,更新仓库&更新作曲家依赖关系,在主repo文件夹中执行git checkout-index到新版本文件夹,使用xcopy将供应商文件夹复制到作曲家依赖到新版本(因为它被git忽略),然后更新一些符号链接,包括IIS使用的\ current \ symlink作为站点根文件夹。

@echo off 
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b) 
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b) 
set date=%mydate%_%mytime% 

mkdir "C:\inetpub\appname\versions\%date%" 

cd "C:\inetpub\appname\repository" 
git pull origin master 
composer update 
git checkout-index -a -f --prefix="C:\inetpub\appname\versions\%date%\\" 

cd "C:\inetpub\appname\versions\%date%\\" 

xcopy /E /y /q "C:\inetpub\appname\repository\www\app\Vendor" "www\app\Vendor" 

del /Q www\app\webroot\files 
rmdir www\app\webroot\files 

cd "C:\inetpub\appname\" 

MKLINK /D "C:\inetpub\appname\versions\%date%\www\app\tmp" "C:\inetpub\appname_tmp" 
MKLINK /D "C:\inetpub\appname\versions\%date%\www\app\webroot\files" "E:\appname_files" 

rmdir current 
MKLINK /D current "C:\inetpub\appname\versions\%date%\www" 

appcmd recycle apppool /apppool.name:"Localhost" 
+0

请显示一些代码。 – 2014-10-10 23:17:37

+0

添加.bat文件内容 – gazareth 2014-10-11 07:37:05

回答

4

更新答案:

若要获得上述正常工作,你必须添加“呼”到执行另一个批处理文件的任何行,例如年初call composer install

+0

。很高兴知道!谢谢! – 2017-02-22 00:01:33

0

听起来像脚本中的错字。是否可以将脚本粘贴到要点或某些代码共享上?如果作曲家更新正确运行,那么这是脚本编写的方式。另外,您不应该在部署脚本中运行Composer更新。部署脚本应该只使用“作曲家安装”

+0

我将稍后发布完整的代码。什么是使用作曲家安装vs更新的原因? – gazareth 2014-10-11 07:21:35

+0

已发布代码。顺便说一句,它从来没有做一个新的作曲家东西安装,因为它从已经有“作曲家安装”运行“仓库”文件夹部署。 – gazareth 2014-10-11 07:37:39

+0

如果有其他人遇到这种情况,下面是安装与更新的说明,以及为什么不应该在部署中运行更新:http://adamcod.es/2013/03/07/composer-install-vs-composer -update.html – gazareth 2014-10-13 14:34:10