Ошибка js-bson - Mosca (MQTT Broker) в OpenShift
Я работал с NodeJS над OpenShift и столкнулся с проблемой, когда пытался запустить сервер Mosca в экземпляре Node. Я получаю следующую ошибку:
[Error: /var/lib/openshift/5547bd284382ec394a000088/app-root/runtime/repo/node_modules/mosca/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/node_modules/bson-ext/build/Release/bson.node: invalid ELF header]
js-bson: Failed to load c++ bson extension, using pure JS version
Недавно я создал новое приложение (в OpenShift) с нуля с помощью картриджа NodeJS и клонировал репозиторий git примера приложения из картриджа в качестве отправной точки. В это я добавил mosca через npm (npm install mosca --save
). Даже не используя Mongo в качестве постоянного хранилища для Mosca, поэтому, просто работая в памяти, я получаю ошибку, показанную выше, когда запускаю приложение. Это нормально, когда я запускаю его на своем ноутбуке, насколько я могу судить.
Я уже попробовал несколько вещей, которые нашел в Stack Overflow, таких как сборка всех зависимых модулей перед отправкой кода обратно в git и очистка кэша npm, но безрезультатно.
Я был бы признателен, если бы у кого-то был подобный опыт работы с другими модулями или такой же опыт работы с Mosca, и он мог бы указать мне правильное направление.
С уважением.
Приведенный ниже код представляет собой стандартный шаблон приложения-примера Node с примером сервера Mosca в функции запуска.
#!/bin/env node
// OpenShift sample Node application
var express = require('express');
var fs = require('fs');
var mosca = require('mosca');
/**
* Define the sample application.
*/
var SampleApp = function() {
// Scope.
var self = this;
/* ================================================================ */
/* Helper functions. */
/* ================================================================ */
/**
* Set up server IP address and port # using env variables/defaults.
*/
self.setupVariables = function() {
// Set the environment variables we need.
self.ipaddress = process.env.OPENSHIFT_NODEJS_IP;
self.port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
if (typeof self.ipaddress === "undefined") {
// Log errors on OpenShift but continue w/ 127.0.0.1 - this
// allows us to run/test the app locally.
console.warn('No OPENSHIFT_NODEJS_IP var, using 127.0.0.1');
self.ipaddress = "127.0.0.1";
};
};
/**
* Populate the cache.
*/
self.populateCache = function() {
if (typeof self.zcache === "undefined") {
self.zcache = { 'index.html': '' };
}
// Local cache for static content.
self.zcache['index.html'] = fs.readFileSync('./index.html');
};
/**
* Retrieve entry (content) from cache.
* @param {string} key Key identifying content to retrieve from cache.
*/
self.cache_get = function(key) { return self.zcache[key]; };
/**
* terminator === the termination handler
* Terminate server on receipt of the specified signal.
* @param {string} sig Signal to terminate on.
*/
self.terminator = function(sig){
if (typeof sig === "string") {
console.log('%s: Received %s - terminating sample app ...',
Date(Date.now()), sig);
process.exit(1);
}
console.log('%s: Node server stopped.', Date(Date.now()) );
};
/**
* Setup termination handlers (for exit and a list of signals).
*/
self.setupTerminationHandlers = function(){
// Process on exit and signals.
process.on('exit', function() { self.terminator(); });
// Removed 'SIGPIPE' from the list - bugz 852598.
['SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT',
'SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGTERM'
].forEach(function(element, index, array) {
process.on(element, function() { self.terminator(element); });
});
};
/* ================================================================ */
/* App server functions (main app logic here). */
/* ================================================================ */
/**
* Create the routing table entries + handlers for the application.
*/
self.createRoutes = function() {
self.routes = { };
self.routes['/asciimo'] = function(req, res) {
var link = "http://i.imgur.com/kmbjB.png";
res.send("<html><body><img src='" + link + "'></body></html>");
};
self.routes['/'] = function(req, res) {
res.setHeader('Content-Type', 'text/html');
res.send(self.cache_get('index.html') );
};
};
/**
* Initialize the server (express) and create the routes and register
* the handlers.
*/
self.initializeServer = function() {
self.createRoutes();
self.app = express();
// Add handlers for the app (from the routes).
for (var r in self.routes) {
self.app.get(r, self.routes[r]);
}
};
/**
* Initializes the sample application.
*/
self.initialize = function() {
self.setupVariables();
self.populateCache();
self.setupTerminationHandlers();
// Create the express server and routes.
self.initializeServer();
};
/**
* Start the server (starts up the sample application).
*/
self.start = function() {
// Start the app on the specific interface (and port).
self.app.listen(self.port, self.ipaddress, function() {
console.log('%s: Node server started on %s:%d ...',
Date(Date.now() ), self.ipaddress, self.port);
});
// START MOSCA SERVER
var server = new mosca.Server({});
server.on('clientConnected', function(client) {
console.log('client connected', client.id);
});
// fired when a message is received
server.on('published', function(packet, client) {
console.log('Published', packet.payload);
});
server.on('ready', function() {
console.log('Mosca server is up and running');
});
};
}; /* Sample Application. */
/**
* main(): Main code.
*/
var zapp = new SampleApp();
zapp.initialize();
zapp.start();
1 ответ
Неверный заголовок ELF обычно означает, что двоичный файл, который вы пытаетесь выполнить, был скомпилирован в системе, несовместимой с системой, в которой вы пытаетесь его запустить (скомпилирован на x86, работает на x86_64 и т. Д.). Вы фиксируете свой каталог node_modules в вашем приложении для git? Вы должны позволить вашему приложению OpenShift установить правильные модули узлов для вас, а не фиксировать этот каталог / добавить его в вашу систему контроля версий git.