2015-12-09 2 views
2

Я работаю над экземпляром EC2, и я разместил проект приложения узла в каталоге/var/www /. Я использую скрипт upstart для запуска приложения узла. Сценарий выскочки помещается в/etc/init /. В приложении я разбор файл, как показано ниже, чтобы получить доступ к конфигурации ВАРА:Node js Файл сценария Upstart читается

var _conf = JSON.parse(fs.readFileSync('./config/config.json')); 

Когда я запустить приложение на переднем плане с узлом команды app.js он работает отлично. Он способен анализировать файл в JSON. Но когда я запускаю сценарий выскочки, возникает следующая ошибка.

fs.js:549 
    return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); 
               ^

Error: ENOENT: no such file or directory, open './config/config.json' 
    at Error (native) 
    at Object.fs.openSync (fs.js:549:18) 
    at Object.fs.readFileSync (fs.js:397:15) 
    at Object.<anonymous> (/var/www/machaao-api/node_modules/machaao-kafka/index.js:3:27) 
    at Module._compile (module.js:435:26) 
    at Object.Module._extensions..js (module.js:442:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:311:12) 
    at Module.require (module.js:366:17) 
    at require (module.js:385:17) 
[2015-12-09T07:52:05.257Z] (sys) Starting 

Ниже мой выскочка сценарий:

#!upstart 
description "API Server" 
author  "Author" 

start on startup 
stop on shutdown 

respawn 
respawn limit 5 20 

script 
     echo "script started..." >> /var/log/project.log 
     echo $$ > /var/run/project-api.pid 
     exec node /var/www/project-api/app.js >> /var/log/project-api.log 2>&1 
end script 

pre-start script 
     echo "Pre-start script started..." 
     echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/project-api.log 
end script 

pre-stop script 
     echo "Pre-stop script started..." 
     rm /var/run/project-api.pid 
     echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/project-api.log 
end script 

Может кто-то объяснить, что это проблема? В нем нет такого файла или каталога, когда я знаю, что он есть. Я новичок в Linux. Это из-за некоторых проблем с разрешением?

+0

Вы должны опубликовать сценарий выскочки. –

+0

Я добавил скрипт upstart в редакторе –

ответ

1

Возможно, вам нужно только cd в каталог узлов и запустить его оттуда:

exec cd /var/www/project-api && node app.js >> /var/log/project-api.log 2>&1 

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

var fs = require('fs'); 
var path = require('path'); 

var _conf = JSON.parse(fs.readFileSync(path.join(__dirname, 'config/config.json'))); 

console.log(_conf); 
+0

Фрагмент кода 'var path = require ('path'); var _conf = JSON.parse (fs.readFileSync (путь.join (__ dirname, 'config/config.json'))); ' Помогло мне решить мою проблему –

0

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

var path = require('path'); 
console.log(path.resolve('./config/config.json')); 

и убедитесь, что он печатает абсолютный путь, которым вы хотите.

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