Node.js работает при запуске с командой узла, но не с навсегда

1

У меня есть приложение Node.js, которое я могу выполнить с этой командой: node app.js Он запускается, и я могу перейти на мой адрес сервера и увидеть, как приложение работает. Однако, когда я пытаюсь запустить приложение навсегда (чтобы приложение работало на моем сервере, даже когда я не вошел в систему), используя эту команду: ./forever start../../../app.js Я получаю следующую ошибку в файле журнала:

Ошибка: не удалось найти "home" в каталоге представлений "/root/ExerciseApp/node_modules/forever/bin/views"

Здесь моя структура каталогов:

ExerciseApp
  /nbproject
    project.properties
    project.xml
  /public
    /css
      style.css
    /scripts
      buttons.js
  /views
    /layouts
      main.handlebars
    home.handlebars
    update.handlebars
  app.js
  .gitignore
  dbcon.js
  package.json

Здесь соответствующие части app.js:

//*****Express stuff*********
var express = require('express');
var app = express();
app.use(express.static('public'));

//*****BodyParser stuff*******
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

//*****Handlebars stuff******
//Create instance of handlebars let it know default layout is 'main'
//Default layout is the area all the other contents will be inserted
var handlebars = require('express-handlebars').create({defaultLayout:'main'});
//.handlebars extensions are managed by handlebars
app.engine('handlebars', handlebars.engine);
//Lets us ignore .handlebars extensions
app.set('view engine', 'handlebars');

var helpers = require('handlebars-helpers')();
var moment = require('moment');

//*****MySQL stuff******
var mysql = require('./dbcon.js');

app.set('port', 3645);

Если я делаю команду ./forever list, я вижу, что приложение работает, но просмотр страницы не работает.

EDIT: Я запускаю это на Debian Linux

Теги:
express
forever

3 ответа

0
Лучший ответ

Если вы не предоставите больше данных и предположим, что операционная система Linux и навсегда установлена с npm install forever -g, то вам следует forever start [../path/to/filename], а не ./forever (что попробуйте запустить двоичный код, называемый "навсегда", в каталоге, в котором вы находитесь.

У вас есть два варианта:

а) бежать навсегда из главного каталога, как я сказал вам

b) использовать абсолютные пути в вашем app.js или относительные пути к.. /../../../node_modules/forever

Я рекомендую a).

  • 0
    Это не проблема с расположением forever . Если они хотят управлять местным населением forever , они, безусловно, могут! Проблема здесь связана с неверной ссылкой на путь в приложении.
  • 0
    Когда я пытаюсь запустить forever start ../../../app.js изнутри ~/ExerciseApp/node_modules/forever/bin я получаю сообщение об ошибке: forever: command not found
Показать ещё 1 комментарий
-2

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

Таким образом, у вас будет что-то вроде этих утверждений

app.set('views', __dirname + '/views');

а также

app.use(express.static(__dirname + 'public'));

Попробуйте это и посмотрите, работает ли это!

  • 0
    Это может быть очень длительным переписыванием в некоторых приложениях, и это скорее кусочек клейкой ленты по фактической проблеме.
  • 0
    @CoreyOgburn Нет, это абсолютно правильное решение. Если ваше приложение использует данные, относящиеся к нему, а не к текущему рабочему каталогу, это то, как на них следует ссылаться в коде. Это не «клейкая лента», это единственное правильное решение.
Показать ещё 2 комментария
-3

Ваш рабочий каталог не работает, когда вы запускаете вечно из node_modules. Вместо этого добавьте скрипт "start" к вашему package.json:

scripts: [
  "start": "forever start app.js"
]

Этот подход использует версию навсегда, указанную в package.json, и не требует установки каких-либо функций с помощью -g. Также рабочий каталог будет той же самой папкой, где есть app.js, и все должно работать нормально.

Теперь любой пользователь в любой системе должен иметь возможность запускать npm install затем npm start и npm start ваше приложение.

  • 0
    Там нет необходимости делать это. Простое использование соответствующей ссылки на каталог в приложении решает проблему правильно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню