首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将GitHub更新部署到Azure托管的DocPad Node.js网站会使站点离线1-2分钟。

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

Stack Overflow用户
提问于 2014-05-06 16:23:40
回答 2查看 125关注 0票数 1

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

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

,这在我看来是不对的。

我认为DocPad静态HTML文件将由node.js生成,然后复制到www.root文件夹--从而最小化任何类型的停机时间。

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

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

由于发生内部服务器错误,无法显示该页。

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

我很想知道为什么会发生这种情况,如果有什么我可以修改以防止这种情况发生的话。我希望能够在任何时候推送更新到网站,同时不影响任何访问者。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-13 12:54:48

感谢Amit苹果公司在这方面的帮助。

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

问题在于deploy.cmd文件中的部署部分。这是Azure在发布新站点时执行的文件。我最初的部署部分是在%DEPLOYMENT_TARGET%文件夹中安装NPM包,但是这应该发生在%DEPLOYMENT_SOURCE%中--因为这是DocPad首先从静态站点执行并生成静态站点的地方。

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

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

代码语言:javascript
复制
:: 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
票数 1
EN

Stack Overflow用户

发布于 2014-05-06 17:45:59

你有两种选择:

  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/
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23500009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档