【问题标题】:How to set correct paths for nodejs application launched via forever如何为永远启动的nodejs应用程序设置正确的路径
【发布时间】:2015-04-10 17:36:31
【问题描述】:

我使用这个 upstart 脚本永远启动我的 nodejs 应用程序,它工作正常。问题是当应用程序以编程方式创建文件夹时,它会在根目录上创建;

/public/newfolder 而不是 /var/www/nodeapp/public/newfolder

这是我的 upstar 文件 myapp.conf:

#!upstart

#
description "Example upstart script for a Node.js process"

start on startup
stop on shutdown


expect fork


env NODE_BIN_DIR="/usr/bin"
env NODE_PATH="/usr/lib/node_modules"
env APPLICATION_PATH="/var/www/nodeapp/app.js"
env PIDFILE="/var/run/myapp.pid"
env LOG="/var/log/myapp.log"
env MIN_UPTIME="5000"
env SPIN_SLEEP_TIME="2000"

script
    # Add the node executables to the path, which includes Forever if it is
    # installed globally, which it should be.
   PATH=$NODE_BIN_DIR:$PATH

    exec forever \
      --pidFile $PIDFILE \
      -a \
      -l $LOG \
      --minUptime $MIN_UPTIME \
      --spinSleepTime $SPIN_SLEEP_TIME \
      start $APPLICATION_PATH
end script

pre-stop script
    # Add the node executables to the path.
    PATH=$NODE_BIN_DIR:$PATH

    exec forever stop $APPLICATION_PATH
end script

以及创建文件夹的 api.js:

newFolder = "public/"+folder_ID; //relative path for new folder
var mkdirp = require('mkdirp');

mkdirp(newFolder, function(err) { 
    if (err){
        console.log('error');
    }else{
        console.log('new folder');
    }

});

希望你能帮助我,谢谢。

【问题讨论】:

    标签: node.js upstart forever


    【解决方案1】:

    当给定相对路径时,所有fs模块的方法都相对于当前工作目录(cwd)进行操作,请参阅docs

    鉴于上述情况,您需要告诉 永远 使用正确的工作目录启动您的应用程序 - 这可以通过 --workingDir 标志来完成。再次查看docs

    【讨论】:

    • 非常感谢。 --workingDir 选项解决了我的问题。
    • 不客气!如果它解决了您的问题,请考虑接受此答案。
    【解决方案2】:

    您需要在 api.js 中使用 __dirname。例如:

    newFolder = __dirname + "/public/"+folder_ID;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      相关资源
      最近更新 更多