【问题标题】:Express app with Node-sass on Azure App Service在 Azure 应用服务上使用 Node-sass 的 Express 应用
【发布时间】:2017-06-11 23:32:30
【问题描述】:

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

这是在 Win64 服务器上构建的,因此在构建的 npm install 部分期间,由于当前环境,它正在下载绑定二进制文件的 x64 版本。

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

错误:缺少绑定 D:\home\site\wwwroot\node_modules\node-sass\vendor\win32-ia32-48\binding.node Node Sass 找不到当前环境的绑定: 带有 Node.js 6.x 的 Windows 32 位

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

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

502 - Web 服务器在充当 网关或代理服务器。你所在的页面有问题 正在寻找,无法显示。当 Web 服务器(而 作为网关或代理)联系上游内容服务器, 它收到了来自内容服务器的无效响应。

有时我只是得到一个 500,但它不再将错误写入日志。

应用显式依赖 node-sass-middleware 包版本 0.11,它依赖于 node-sass 4.3.0。

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

【问题讨论】:

    标签: node.js express azure-web-app-service node-sass


    【解决方案1】:

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

    通过部署日志:

    remote:选定的 node.js 版本 7.4.0。使用 package.json 文件选择不同的版本。 远程:选择的 npm 版本 4.0.5

    并根据类似的错误信息:

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

    我在package.json中指定了node.js版本:

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

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

    对于进一步的 500 错误,您可以尝试利用 App Service Editor 检查您网站的输出。

    从 Azure 门户进入 App Service Editor,点击 show output 按钮切换到 output 部分,然后点击 run 启动应用程序。

    【讨论】:

    • 感谢您的意见,应用服务编辑器绝对有用。我们最终使用 gulp-sass 并运行 npm rebuild node-sass 来下载绑定,然后再运行 npm install。我们还需要修改 web.config 以向 bin/www 发送动态请求。我们现在陷入了最后一个问题,这是因为 iisnode 似乎是从 bin 目录运行的,这意味着没有找到对与应用程序根目录相关的文件的任何引用,例如 ./data/stuff.json并导致 500 错误。这并不理想——这是不使用 bin/www 文件的唯一方法吗?
    • 看来你的新问题很复杂。你的应用程序的入口在根目录下有app.jsserver.js,我们需要在web.cofnig中配置handlerurl ruler。作为github.com/tjanczuk/iisnode/blob/master/src/samples/express/… 的示例。顺便说一句,我在评论中很难很清楚地关注你,你的进一步问题似乎与你原来的问题没什么关系。因此,我建议您在 SO 上提出一个新问题,并提供有关您的新问题的更详细信息。谢谢。
    • 是的,有 2 个问题在起作用,现在都已解决。将我的答案添加到这篇文章中。感谢您的意见,这很有帮助
    【解决方案2】:

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

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

    与其浪费更多时间试图弄清楚我们是否可以配置不同的工作目录,我们只是将 bin/www 移动到 ./server.js 并将 web.config 更改为指向 server.js

    express 应用现在可以在 azure 网站上按预期运行。

    【讨论】:

      猜你喜欢
      • 2022-08-12
      • 1970-01-01
      • 2021-03-17
      • 2013-03-18
      • 1970-01-01
      • 2014-03-29
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多