Azure App Service上使用Node-sass的Express应用程序

时间:2017-01-26 13:21:31

标签: node.js express azure-web-sites node-sass

我有一个使用express的基本节点Web应用程序,它依赖于node-sass库。

这是在Win64服务器上构建的,因此在构建的npm安装过程中,由于当前环境,它正在下载绑定二进制文件的x64版本。

当它部署到Azure应用服务时,由于节点运行32位在Azure应用服务中,它会因与node-sass绑定二进制文件不兼容而引发运行时错误...

  

错误:缺少绑定   d:\家\网站\ wwwroot的\ node_modules \节点萨斯\供应商\ Win32的ia32-48 \ binding.node   Node Sass找不到当前环境的绑定:   Windows 32位与Node.js 6.x

     

找到以下环境的绑定:      - 带有Node.js 6.x的Windows 64位

当我明确签入the 32bit binding并重新部署时,我有时会遇到502网关错误......

  

502 - Web服务器在充当a时收到无效响应   网关或代理服务器。您所在的页面存在问题   寻找,它无法显示。当Web服务器(同时   充当网关或代理)联系上游内容服务器,   它收到内容服务器的无效响应。

和其他时间我只得到一个500,但它不再将错误写入日志。

该应用程序明确依赖于node-sass-middleware软件包版本0.11,这取决于node-sass 4.3.0。

没有任何错误日志我处于死胡同。你以前遇到过这个问题,如果是的话,你是怎么解决的?

2 个答案:

答案 0 :(得分:1)

我利用Node-Sass Example App进行快速测试,使用local git将示例项目部署到Azure Web Apps,从而重现您的问题。

通过部署日志:

  

remote:选择node.js版本7.4.0。使用package.json文件选择其他版本。   remote:选择npm版本4.0.5

并根据类似的错误消息:

  

找到以下环境的绑定: - 带有Node.js 6.x的Windows 64位

我将package.json中的node.js版本指定为:

"engines": {
  "node": "= 6.9.1",
  "npm": "> 3"
}

然后通过本地git将其重新部署到Azure,样本工作正常。

对于您的500错误,您可以尝试利用应用服务编辑器来检查您网站的输出。

从Azure门户进入应用服务编辑器,点击显示输出按钮切换到输出部分,然后点击运行启动应用程序。 enter image description here

答案 1 :(得分:1)

我们最终通过为gulp-sass交换node-sass-middleware,并为node-sass添加npm rebuild步骤来解决这个问题。这里的关键区别是现在通过gulp在构建过程中呈现css。首先运行npm rebuild node-sass将调用绑定下载到构建服务器(如果需要),然后单独的任务将调用gulp任务来呈现css。

我们问题的其余部分是由于web.config将app.js指定为入口点,但express4使用bin / www文件,只是引用app.js. bin / www作为入口点的问题是iisnode现在使用bin作为工作目录,这导致了根相对引用的问题。

我们只需将bin / www移动到./server.js并将web.config更改为指向server.js

,而不是浪费任何时间来确定我们是否可以配置不同的工作目录。

Express应用程序现在按照预期在azure网站上运行。