正在运行“;作曲家更新”;在Windows.bat文件中


Running "composer update" within a Windows .bat file

我最近更新了我的应用程序,使其所有依赖项都使用composer。作为这项工作的一部分,我更新了我的部署脚本——Grunt任务和批处理文件的组合——在执行"git pull"后包含一个"composer update"。

然而,我发现,尽管composer更新成功运行,但在该行之后,批处理文件的其余部分中没有任何命令运行。如果我去掉"composer update"行,其他一切都会正常运行(但当然,我有过时/缺少依赖项的风险)。

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

这将在''version''中创建一个新的带日期戳的文件夹,更新存储库&更新主repo文件夹中的composer依赖项,在新版本文件夹中执行git签出索引,使用xcopy将具有composer依存项的Vendor文件夹复制到新版本(因为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"

更新答案:

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

听起来像是脚本中的拼写错误。你有可能把脚本粘贴到要点或一些代码共享上吗?如果composer更新运行正确,那么它就是脚本编写方式的一部分。此外,您永远不应该在部署脚本中运行composer更新。部署脚本应仅使用"composer-install"