将Azure托pipe的DocPad Node.js网站的GitHub更新部署到站点,使站点离线1-2分钟

我正在testing一个DocPad / Node.js站点的GitHub部署。

我已经部署工作,但是当一个新的推进到GitHub公共网站站点变得不可用1至2分钟,而部署正在进行中。

这似乎对我来说。

DocPad静态HTML文件将由node.js生成,然后复制到wwwroot文件夹 – 从而最大限度地减less任何types的停机时间。

但是,这似乎并不是这样。

在网站正在部署访问该网站时收到以下错误信息:

页面无法显示,因为发生了内部服务器错误。

DocPad / Node.js部署的副本可以在https://github.com/Richard-West/DocPadAzureDemofind

我将不胜感激为什么会发生这种情况,如果有什么我可以修改,以防止这种情况发生。 我希望能够随时将更新推送到网站,而不会影响任何访问者。

有2个选项给你:

  1. 您可以在生成静态html文件之前自定义您的部署过程,然后将其部署到wwwroot,以获取有关如何的更多信息: http://www.amitapple.com/post/38418009331/azurewebsitecustomdeploymentpart2/ http://www.amitapple。 COM /后/ 38419111245 / azurewebsitecustomdeploymentpart3 /

  2. 您可以首先使用“插槽”function部署到临时网站,一旦临时网站完全部署并准备好在生产和临时网站之间交换的请求,以便访问者不会受到影响。 更多关于它: http : //azure.microsoft.com/en-us/documentation/articles/web-sites-staged-publishing/

非常感谢阿米特苹果在这方面的帮助。

Amit在我发布的Gist的评论中发布了一些非常有用的信息,所以我想在这里发布最终的解决scheme,以防其他人遇到这个问题。

问题是由于deploy.cmd文件中的Deployment部分。 这是Azure在新网站发布时执行的文件。 我的原始部署部分是在%DEPLOYMENT_TARGET%文件夹中安装NPM软件包,但是这应该在%DEPLOYMENT_SOURCE%中发生 – 因为DocPad将首先执行并生成静态站点。

网站完全生成后,KuduSync将新版本复制到%DEPLOYMENT_TARGET%文件夹中的wwwroot,并且该网站已经生效。

“部署”部分的副本如下所示。 还值得注意的是,在第3部分中,在构buildDocPad站点之前,我将删除以前任何版本中“out”文件夹中的所有文件。 这是用“rd / s / q out”完成的。 这可确保先前创build但不在网站中的页面或文件不会复制到生产站点。

 :: Deployment :: ---------- :Deployment echo Handling DocPad deployment. :: 1. Select node version call :SelectNodeVersion :: 2. Install npm packages echo Installing npm packages... pushd "%DEPLOYMENT_SOURCE%" call !NPM_CMD! install --production IF !ERRORLEVEL! NEQ 0 goto error popd :: 3. Build DocPad site echo Building DocPad site... echo Deployment Source Folder: %DEPLOYMENT_SOURCE% echo Deployment Target Folder: %DEPLOYMENT_TARGET% pushd "%DEPLOYMENT_SOURCE%" rd /s /q out IF !ERRORLEVEL! NEQ 0 goto error "!NODE_EXE!" .\node_modules\docpad\bin\docpad -e static generate IF !ERRORLEVEL! NEQ 0 goto error popd :: 4. KuduSync echo Copying Files... call %KUDU_SYNC_CMD% -v 500 -f "%DEPLOYMENT_SOURCE%\out" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" IF !ERRORLEVEL! NEQ 0 goto error