我有一个使用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。
没有任何错误日志我处于死胡同。你以前遇到过这个问题,如果是的话,你是怎么解决的?
答案 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错误,您可以尝试利用应用服务编辑器来检查您网站的输出。
答案 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网站上运行。