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



我正在测试DocPad/Node.js站点的GitHub部署。

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

认为 DocPad静态HTML文件将由node.js生成,然后复制到wwwroot文件夹中——从而最大限度地减少任何类型的停机时间。

然而,情况似乎并非如此。

当网站正在部署时,网站的访问者收到以下错误消息:

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

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

找到。

我将感谢任何关于为什么会发生这种情况的见解,如果有什么我可以修改以防止这种情况的发生。我希望能够随时向网站推送更新,同时不影响任何访问者。

你有两个选择:

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

  2. 您可以使用"插槽"特性,首先将其部署到登台站点,一旦登台站点完全部署并准备好接受请求,您就可以在生产站点和登台站点之间进行交换,这样访问者就不会受到影响。更多信息:http://azure.microsoft.com/en-us/documentation/articles/web-sites-staged-publishing/

非常感谢Amit Apple的帮助。

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

问题是由部署中的部署部分引起的。cmd文件。这是在发布新站点时由Azure执行的文件。我最初的部署部分是在%DEPLOYMENT_TARGET%文件夹中安装NPM包,但是这应该发生在%DEPLOYMENT_SOURCE%文件夹中——因为DocPad将从那里执行并首先生成静态站点。

站点完全生成后,KuduSync将新版本复制到%DEPLOYMENT_TARGET%文件夹中的wwwroot中,并且站点是活动的。

下面是部署部分的副本。同样值得注意的是,在第3部分中,在构建DocPad站点之前,我删除了以前构建中"out"文件夹中的所有文件。这是通过"rd/s/q out"完成的。这可以确保以前创建的但不再在站点中存在的页面或文件不会复制到生产站点。

:: 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_modulesdocpadbindocpad -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

最新更新