У меня есть приложение 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
Если вы не предоставите больше данных и предположим, что операционная система Linux и навсегда установлена с npm install forever -g
, то вам следует forever start [../path/to/filename]
, а не ./forever
(что попробуйте запустить двоичный код, называемый "навсегда", в каталоге, в котором вы находитесь.
У вас есть два варианта:
а) бежать навсегда из главного каталога, как я сказал вам
b) использовать абсолютные пути в вашем app.js или относительные пути к.. /../../../node_modules/forever
Я рекомендую a).
Попробуйте использовать dirname
чтобы ваши пути были одинаковыми независимо от того, как выполняется ваше приложение.
Таким образом, у вас будет что-то вроде этих утверждений
app.set('views', __dirname + '/views');
а также
app.use(express.static(__dirname + 'public'));
Попробуйте это и посмотрите, работает ли это!
Ваш рабочий каталог не работает, когда вы запускаете вечно из node_modules. Вместо этого добавьте скрипт "start" к вашему package.json:
scripts: [
"start": "forever start app.js"
]
Этот подход использует версию навсегда, указанную в package.json, и не требует установки каких-либо функций с помощью -g. Также рабочий каталог будет той же самой папкой, где есть app.js, и все должно работать нормально.
Теперь любой пользователь в любой системе должен иметь возможность запускать npm install
затем npm start
и npm start
ваше приложение.
forever
. Если они хотят управлять местным населениемforever
, они, безусловно, могут! Проблема здесь связана с неверной ссылкой на путь в приложении.forever start ../../../app.js
изнутри~/ExerciseApp/node_modules/forever/bin
я получаю сообщение об ошибке:forever: command not found