2015-06-03 3 views
0

Я работаю над NodeJS на OpenShift и сталкиваюсь с проблемой, когда пытаюсь запустить сервер Mosca в экземпляре узла. Ошибка я получаю следующим образом:Ошибка js-bson - Mosca (MQTT Broker) на OpenShift

[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 и клонировали образец приложения репозиторий из картриджа в качестве отправной точки. В это я добавил mosca через npm (npm install mosca --save). Даже не используя Mongo в качестве постоянного хранилища для Mosca, поэтому, просто работая в памяти, я получаю ошибку, показанную выше при запуске приложения. Это нормально, когда я запускаю его на своем ноутбуке, одинаковые версии всего, насколько я могу судить.

Я уже пробовал несколько вещей, которые я нашел в переполнении стека, например, построил все зависимые модули, прежде чем нажимать код обратно на git и очищать кеш-нпп, но безрезультатно.

Я был бы признателен, если бы у кого-то был аналогичный опыт с другими модулями или с тем же опытом с Моской и он мог бы указать мне в правильном направлении.

С уважением.

Код, приведенный ниже, является стандартным примером шаблона приложения 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.

+0

Спасибо, это действительно привело меня в нужное место. Я не заметил, что примерная структура приложения включает файл .gitkeep в node_modules, что означает, что все, что я построил на своей локальной системе, было нажато на сервер OpenShift, после чего он терпит неудачу. Изменил его на .gitignore (и удалил модули, чтобы заставить перестроить), и теперь все работает отлично. Еще раз спасибо. –

Смежные вопросы