Js-bson error - Mosca (MQTT Broker) on OpenShift

I am working on NodeJS on OpenShift and run into a problem when I try to start the Mosca server on a Node instance. The error I am getting is as follows:

[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 

I recently created a new application (on OpenShift) using a NodeJS cartridge and cloned a sample git repository application from the cartridge as a starting point. I added mosca to this via npm ( npm install mosca --save ). Even without using Mongo as a permanent storage for Mosca, therefore, just working in memory, I get the error shown above when the application starts. This is great when I run it on my laptop, in the same versions of everything as far as I can tell.

I already tried a few things that I found in Stack Overflow, for example, building all the dependent modules before pushing the code on git and clearing the cache-npp, but to no avail.

I would appreciate it if someone had a similar experience with other modules or with the same experience with Mosca and he could point me in the right direction.

Sincerely.

The following is a standard Node application template template with a sample Mosca server in the startup function.

 #!/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(); 
0
source share
1 answer

An invalid ELF header usually means that the executable you are trying to execute has been compiled on a system that is not compatible with the system on which you are running it (compiled on x86, runs on x86_64, etc.). Do you commit your node_modules directory in your application before git? You should allow your OpenShift application to install the correct node modules for you, and not commit this directory / add it to your git version control system.

+1
source

Source: https://habr.com/ru/post/1216183/


All Articles