首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将节点本机模块部署到Azure WebSites

将节点本机模块部署到Azure WebSites
EN

Stack Overflow用户
提问于 2014-08-05 15:42:56
回答 3查看 1.4K关注 0票数 5

我正在尝试将以下示例节点应用程序部署到Azure网站:

代码语言:javascript
复制
var http = require('http');
var port = process.env.port || 1337;

http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/html' });

    try {

        var canvasModule = require('canvas'), 
            canvas = new canvasModule(200, 200), 
            ctx = canvas.getContext('2d');

        ctx.rotate(0.5);

        ctx.font = '30px Impact';
        var message = "Hello World";
        ctx.fillText(message, 40, 40);

        ctx.strokeRect(30, 5, 160, 50);

        res.end('<html><img src="' + canvas.toDataURL() + '" /></html>');

    } catch (e) {
        res.end('Error: ' + e);
    }

}).listen(port);

棘手的部分是,我正在使用一个名为"画布“的节点模块,它需要在安装时使用node进行编译。

称,Azure网站不支持Microsoft页面本机模块,并应将模块的编译版本复制到Azure中,以使应用程序正常工作:

本机模块 虽然大多数模块只是纯文本JavaScript文件,但有些模块是特定于平台的二进制图像.这些模块是在安装时编译的,通常使用Python和node进行编译。Azure站点的一个特定限制是,虽然它本机了解如何安装package.json或npm缩缩. does文件中指定的模块,但它不提供Python或节点-gyp,也不能构建本机模块。 由于依赖于作为应用程序一部分部署的node_modules文件夹,因此只要在上安装和编译,作为已安装模块的一部分的任何本机模块都应该在云服务中工作。 Azure网站不支持本机模块。一些模块(如JSDOM和MongoDB )具有可选的本机依赖关系,并且将与托管在Azure网站中的应用程序一起工作。

我将所有文件都部署到Azure (使用发布向导),所有文件都被发送到Azure (显然至少),包括已编译的模块。在Azure上运行站点时,我会获得以下异常:

代码语言:javascript
复制
Error: The specified module could not be found.
D:\home\site\wwwroot\node_modules\canvas\build\Release\canvas.node

但该文件实际上部署在服务器上:

创建VM显然是一种选择,但我更喜欢使用网站。有人知道我可以试试看吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-06 01:02:40

错误消息“无法找到指定的模块”有点误导。它可能意味着找不到一个或多个依赖的dll。

我以为你在Windows中使用了构建指令。如果使用说明中的GTK2压缩文件构建画布,则可以将%GTKDIR%\bin\freetype6.dll复制到%YourApp%\node_modules\canvas\build\Release。在生成过程中不会复制此dll。您还需要将此部署到VM中。或者您可以在Windows GTK3包上构建画布。

不幸的是,即使在您拥有所有dll之后,Azure网站的沙箱似乎也会阻止画布运行。希望能在不久的将来启用。

票数 5
EN

Stack Overflow用户

发布于 2014-10-23 19:29:47

好吧,今天开始工作了!

您需要部署您的node_modules目录,此外,您还需要将所有内容gtk/bin复制到应用程序的根目录,这使得它有点混乱,但它可以工作。我想你可以改变路径去寻找其他地方,但我需要让应用程序运行,所以我没有做进一步的调查。

票数 2
EN

Stack Overflow用户

发布于 2014-08-06 02:04:08

@mtian的答案中的最后一行是关键。您可以花时间让它进行部署,但最终Azure网站VM缺少节点-画布所依赖的GDI+ API(可能是出于安全考虑而阻止的)。如果您想要在Azure上的节点-画布,您不能使用Azure网站,而是需要设置和管理您自己的VM。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25142980

复制
相关文章

相似问题

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