2014-10-10 26 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