Openshift 无法加载 c++ bson 扩展/找不到模块('swig')

Posted

技术标签:

【中文标题】Openshift 无法加载 c++ bson 扩展/找不到模块(\'swig\')【英文标题】:Openshift Failed to load c++ bson extension / Cannot find module ('swig')Openshift 无法加载 c++ bson 扩展/找不到模块('swig') 【发布时间】:2014-04-05 08:10:06 【问题描述】:

我正在尝试让我的 node/mongo/express 应用程序在 Openshift 上运行。它在本地工作,但在 Openshift 上我收到一个错误:找不到模块 ('swig') 我已将其添加到 package.json 中的依赖项中,如下所示。

"dependencies": 
"bcrypt-nodejs": "~0.0.3",
"consolidate": "~0.9.1",
"express": ">=3.x",
"mongodb": "~1.3.9",
"swig": "~0.14.0",
"validator": "~1.1.3"
,
"devDependencies": ,
"bundleDependencies": [],

我在 server.js 中需要它,如下所示:

var swig = require('swig'); var cons = require('consolidate'); 
//later app.engine('html', cons.swig);

完整的错误如下:

Failed to load c++ bson extension, using pure JS version
Current directory: /var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/runtime/
repo

/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/runtime/repo/node_modules/m
ongodb/lib/mongodb/mongo_client.js:378
          throw err
                ^
Error: failed to connect to [127.9.214.2:27017]
    at null.<anonymous> (/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/ru
ntime/repo/node_modules/mongodb/lib/mongodb/connection/server.js:553:74)
    at EventEmitter.emit (events.js:106:17)
    at null.<anonymous> (/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/ru
ntime/repo/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:140:15
)
    at EventEmitter.emit (events.js:98:17)
    at Socket.<anonymous> (/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/
runtime/repo/node_modules/mongodb/lib/mongodb/connection/connection.js:512:10)
    at Socket.EventEmitter.emit (events.js:95:17)
    at net.js:426:14
    at process._tickCallback (node.js:415:13)
DEBUG: Program node server.js exited with code 8

DEBUG: Starting child process with 'node server.js'
changed
Failed to load c++ bson extension, using pure JS version
Current directory: /var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/runtime/
repo
connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
Express server listening on port 8080

module.js:340
throw err;
      ^
Error: Cannot find module 'swig'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/
runtime/repo/server.js:3:12)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
DEBUG: Program node server.js exited with code 8

DEBUG: Starting child process with 'node server.js'

这是加载 c++ bson 扩展失败的问题,导致这些其他错误吗?有没有办法解决这个问题?它在本地运行良好,只是在 openshift 上不行。 提前感谢您的帮助!


我通过删除并运行 npm install 重新安装了我的 node-modules 文件夹,并修复了无法找到模块('swig')错误,但是,现在我收到一个错误,它无法找到模块'.. /helpers',这似乎是一个文件夹,应该存在于节点模块文件夹中的 swig 中。我搜索了它的包含位置,这就是我得到的:

Searching 744 files for "../helpers"

C:\Repositories\meanapps\node_modules\swig\lib\tags\else.js:
    1: var helpers = require('../helpers'),
    2    _ = require('underscore');
    3  

C:\Repositories\meanapps\node_modules\swig\lib\tags\filter.js:
    1: var helpers = require('../helpers'),
    2    _ = require('underscore');
    3  

C:\Repositories\meanapps\node_modules\swig\lib\tags\for.js:
    1: var helpers = require('../helpers'),
    2    _ = require('underscore');
    3  

C:\Repositories\meanapps\node_modules\swig\lib\tags\if.js:
    1: var helpers = require('../helpers'),
    2    _ = require('underscore');
    3  

C:\Repositories\meanapps\node_modules\swig\lib\tags\import.js:
    1: var helpers = require('../helpers'),
    2    _ = require('underscore');
    3  

C:\Repositories\meanapps\node_modules\swig\lib\tags\include.js:
    1: var helpers = require('../helpers'),
    2    _ = require('underscore');
    3  

C:\Repositories\meanapps\node_modules\swig\lib\tags\set.js:
    1: var helpers = require('../helpers'),
    2    _ = require('underscore');

这可能是因为我使用了不正确的 swig 版本吗?

好的,通过确保它们是通过 git 添加到 openshift 来修复该错误。现在,我明白了,但我不知道它在寻找什么:

Error: ENOENT, no such file or directory '//layout.html'
    at Object.fs.openSync (fs.js:427:18)
    at Object.fs.readFileSync (fs.js:284:15)
    at getSingle (/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/runtime/r
epo/node_modules/swig/lib/swig.js:152:19)
    at get (/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/runtime/repo/no
de_modules/swig/lib/swig.js:159:7)
    at Object.exports.compileFile (/var/lib/openshift/52fda83ee0b8cd07040001cb/a
pp-root/runtime/repo/node_modules/swig/lib/swig.js:174:5)
    at Object.<anonymous> (/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/
runtime/repo/node_modules/swig/lib/parser.js:346:33)
    at Array.forEach (native)
    at Function._.each._.forEach (/var/lib/openshift/52fda83ee0b8cd07040001cb/ap
p-root/runtime/repo/node_modules/underscore/underscore.js:79:11)
    at Object.precompile (/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/r
untime/repo/node_modules/swig/lib/parser.js:324:7)
    at Object.compile (/var/lib/openshift/52fda83ee0b8cd07040001cb/app-root/runt
ime/repo/node_modules/swig/lib/parser.js:425:18)

【问题讨论】:

我可能会建议完全删除您的 node_modules 文件夹并使用“npm install”重新获取它。有时,当我遇到奇怪的 npm 问题时,我还不得不运行“npm cache clean”。此外,由于您在安装本机模块时遇到问题,您可能需要查看是否安装了 gcc。 嘿,修复了找不到模块'swig'错误!现在我得到了一个不同但相关的错误,我将在上面更新。谢谢! 我认为我现在的问题是 swig 需要 fs。我尝试使用 npm install fs 安装 fs,但它响应它不在 npm 注册表中。您认为这可能是问题所在吗?如果是,如果 fs 不在注册表中,我该如何安装? fs 是一个核心 node.js 模块——你不需要通过 npm 安装它,它只是“那里”。你用的是什么版本的 node.js? 并且 fs 显然存在,因为 fs.openSync 正在引发错误。看起来 swig 正在尝试读取位于“//layout.html”位置的文件,这在任何操作系统上都是无效的文件名/路径。 【参考方案1】:

我认为您问题的第一部分是某种损坏的模块 - 可能是由于没有安装 gcc,但也可能没有。

我的建议是擦除您的节点模块,然后使用 npm 缓存并重新获取模块:

rm -rf node_modules
npm cache clean
npm install

执行此操作后,您在打开文件“//layout.html”时遇到问题

这似乎是一个已知问题,已由initializing swig and to tell it where to find the template 解决。

【讨论】:

成功了!!非常感谢!我在我的计算机上安装了 gcc 并添加到路径中,但我认为该错误需要在 openshift 上解决。在 openshift 论坛上,我在这里被提到了 openshift.com/content/… 的那个错误。但它现在似乎没有引起任何严重问题,其他错误已解决,应用程序运行起来就像一个魅力!再次感谢!

以上是关于Openshift 无法加载 c++ bson 扩展/找不到模块('swig')的主要内容,如果未能解决你的问题,请参考以下文章

无法加载 c++ bson 扩展

js-bson:无法加载 c++ bson 扩展,在 Windows 的 mongoose 上使用纯 JS 版本

使用 Mongodb 和 Node.js 无法加载 c++ bson 扩展错误

“错误:%1 不是有效的 Win32 应用程序。安装项目时无法加载 c++ bson 扩展”

运行 mongodb-backed node app 时无法加载 C++ bson 扩展,使用纯 JS 版本错误

js-bson:使用纯JS版本加载c++ bson扩展失败