Скрипт PM2 не найден для bin / www - PullRequest
1 голос
/ 04 апреля 2020

Недавно я решил запустить свое приложение с pm2 в качестве службы. Для меня pm2 start app.mjs запускает приложение как службу, но, похоже, pm2 неправильно запускает мое приложение express. Я использовал express npm для создания приложения, подобного этому:

//Imports
import express from "express";

//Setups
const app = express();
const port = process.env.PORT;

app.get("/", async (req, res) => {
  res.send("Hello world!");
});

//Running server
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

Также пробовал pm2 start ./bin/www, который дает мне ошибку Script not found, и, кажется, все в порядке с express-generator, а не express npm вместе с приложением. Приложение работает корректно в режиме разработки (node app.mjs).

ОБНОВЛЕНИЕ

Я решил проблему с помощью Konstantinos Lamogiannis . После настройки файла конфигурации, а также ответа я изменил свою форму app.mjs на app.js и изменил стиль import на const variable = require("");, и это исправило мою проблему. Я не знаю, почему это произошло, но кажется, что pm2 npm может конфликтовать с новой функцией nodejs, которая поддерживает синтаксис import ES6. Журнал

pm2 выдавал мне эту ошибку: unhandledRejection вы, возможно, забыли поймать отказ Promise!

1 Ответ

1 голос
/ 04 апреля 2020

Вы можете попробовать создать файл с именем: ecosystem.config.js в папке своих проектов root, а затем добавить следующий код в файл:

module.exports = {
  apps: [{
    name: 'yourAppName',
    script: 'bin/www/app.mjs', // the path of the script you want to execute,
    // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
    instances: 1,
    autorestart: true,
    watch: false,
    error_file: 'err.log',
    out_file: 'out.log',
    log_file: 'combined.log',
    time: true,
    env: {
    },
  }],
};

В приведенной выше конфигурации вы заметите, что в Свойство скрипта имеет значение bin / www/app.mjs. Я предполагаю, что у вас есть app.m js в bin / www directory и помещено это значение.

Затем запустите pm2-runtime start ecosystem.config.js

РЕДАКТИРОВАТЬ # 1

Предполагая, что ваш файл запуска находится в каталоге root вашего проекта, используйте script: 'app.mjs'.

Таким образом, ваш окончательный ecosystem.config.js будет:

module.exports = {
  apps: [{
    name: 'yourAppName',
    script: 'app.mjs', // the path of the script you want to execute,
    // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
    instances: 1,
    autorestart: true,
    watch: false,
    error_file: 'err.log',
    out_file: 'out.log',
    log_file: 'combined.log',
    time: true,
    env: {
    },
  }],
};

Попробуйте pm2-runtime start ecosystem.config.js из каталога проекта root (где находится app.m js).

...