Перенос node приложения с локальной ubuntu на удаленный CentOS или почему не запускается nodejs приложение

Недавно переносил nodejs приложение с локального сервера на удаленный. Приложение после переноса не запустилось. И после беглого поиска как всегда начало казаться, что это я один в мире такой криворукий, а у все остальных все работает.


Приложение у меня в репозитории, модули в репозитории. Сделал на локальной машине commit-push. На сервере сделал pull.
Поставил nodejs через sudo yum install node. В папке приложения на сервере попробовал запустить свое приложение на что получил ошибку:

$ nodejs app.js
bash: nodejs: command not found

Проверил есть ли nodejs:

$ which nodejs
/usr/bin/which: no nodejs in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

Проверил есть ли node:

$ which nodejs
/usr/bin/node

Оказалось, что в ubuntu есть отдельный пакет node, ничего общего с nodejs не имеющий:

$ man node
NAME
ax25-node - Node front end for AX.25, NET/ROM, Rose and TCP
...

Может этот пакет и в CentOS есть, но по крайней мере в моей установке CentOS:

$ man node
NAME
node - Server-side JavaScript
...

Дальше я попробовал создать просто helloworld.js с выводом в консоль внутри. helloworld.js сработал как и ожидалось.
Значит проблема была где-то в коде или в используемых модулях.

Пораскинув мозгами, я вспомнил, что использую один глобальный модуль, про который совсем забыл. Команды для просмотра глобальных модулей я не нашел, да похоже она и не нужна особо.
Вы можете проверить глобальные модули следующими командами:

#CentOS 6.5:
ls -l /usr/lib/node_modules

#Ubuntu:
ls -l /usr/local/lib/node_modules

Действительно затерялся модуль bunyan, так что я установил его на сервере с CentOS. Не помогло. Мое nodejs приложение завершалось сразу после запуска без какого либо вывода в консоль.

Я занялся пошаговой отладкой.

Ошибка нашлась в подключении к базе данных. Я перенес конфиги для php части приложения и элементарно упустил из виду, что у nodejs части приложения свои конфиги. Но даже не в этом было дело.

Дело оказалось в том, что моя конструкция обработки ошибок для подключения к базе не сработала. У меня было вот так:

var db = orm.connect({
   host     : config.db.host,
   database : config.db.database,
   user     : config.db.user,
   password : config.db.password,
   protocol : "mysql",
   socketPath: config.db.socket,
   port     : config.db.port,
   query    : {
	pool: true,
	debug: true
   }
});

db.on("connect", function(error, db) {
   console.log('работает?'); // этот код уже не отрабатывал, и не мудрено
   if (error) {
      _console.warn(error);
      logger.fatal(error);
      throw error;
   }

   AccountModel = AccountModule(db);

   doTheWork();
});

И я рассчитывал, что on(«connect») будет вызван в любом случае. Стыдно, что и говорить
Но код внутри callback’а не срабатывал вообще. Поэтому пришлось изменить его вот так:

var db = orm.connect({
    host     : config.db.host,
    database : config.db.database,
    user     : config.db.user,
    password : config.db.password,
    protocol : "mysql",
    socketPath: config.db.socket,
    port     : config.db.port,
    query    : {
        pool: true,
        debug: true
    }
},function (error, db) {
    if (error) {
        _console.warn(error);
        logger.fatal(error);
        throw error;
    }
});

После прописывания этого callback’а nodejs как я и ожидал node выбросил исключение.

Полезно(3)Бесполезно(0)

One Response to “ Перенос node приложения с локальной ubuntu на удаленный CentOS или почему не запускается nodejs приложение ”

Комментарии закрыты.