在Windows .bat文件中运行“composer update”

时间:2014-10-10 22:41:51

标签: php batch-file composer-php

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

但是,我发现虽然编辑器更新成功运行,但该行之后的其余批处理文件中没有任何命令运行。如果我把“作曲家更新”换行,其他一切都运行正常(但我当然冒着过时/缺少依赖的风险)。

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

这会在\ versions \中创建一个新的带日期戳的文件夹,更新存储库&更新主repo文件夹中的composer依赖项,在新版本文件夹中执行git checkout-index,使用xcopy将具有编译器依赖关系的Vendor文件夹复制到新版本(因为它被git忽略)然后更新一些符号链接,包括\ current \ symlink,由IIS用作站点根文件夹。

@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"

2 个答案:

答案 0 :(得分:5)

更新回答:

为了使上述工作正常,您必须将“call”添加到执行另一个批处理文件的任何行的开头,例如call composer install

答案 1 :(得分:0)

听起来像是剧本中的拼写错误。您是否可以将脚本粘贴到gist或某些代码共享上?如果作曲家更新运行正常,那么就像编写脚本一样。此外,您永远不应该在部署脚本中运行composer update。部署脚本应该只使用“composer install”