2017-06-16 94 views
1

我有一个Node.js应用程序,我可以使用以下命令正常运行:node app.js。它启动,我可以去我的服务器地址,看到它的应用程序工作。然而,当我尝试运行与永远的应用程序(以保持应用程序我的服务器,即使我没有登录上运行),使用这个命令:./forever start ../../../app.js我得到在日志文件中出现以下错误:Node.js在使用node命令运行时工作,但不能永久运行

Error: Failed to lookup view "home" in views directory "/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,我可以看到该应用正在运行,但访问该页面不起作用。

编辑:我在Debian Linux上运行此

回答

0

除非你提供更多的数据,并假设操作系统是Linux和永远的安装与npm install forever -g,你应该做的是forever start [../path/to/filename],不./forever(这将尝试运行一个名为“永远”,你是在目录内的二进制

你有两个选择:

一)从主目录运行下去的方式,我告诉你

b)在你的app.js中使用绝对路径,或相对路径../../../../node_modules/forever

我推荐a)。

+0

这不是'永远'的位置问题。如果他们想运行一个本地的'永远',他们当然可以!这里的问题与应用程序中的路径引用不正确有关。 – Brad

+0

当我尝试运行'永远开始../../../app。从〜/ ExerciseApp/node_modules/forever/bin'里面的js'我得到一个错误:'forever:command not found' –

+0

@TaylorLiss你需要永久安装在全局中,并且你需要以root身份执行。尝试“sudo npm永远安装-g”。然后从目录app.js中“永远启动app.js”。 – sidewinder

-1

尝试使用dirname,这样无论您的应用如何运行,您的路径都是相同的。

所以,你必须像这些语句

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

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

试一下,看看它是否有效!

+0

在某些应用程序中,这可能是一个非常冗长的重写,并且在实际问题上更多地是一段管道磁带。 –

+0

@CoreyOgburn不,这是完全正确的解决方案。如果您的应用程序正在使用与其相关的数据而不是当前的工作目录,那么应该在代码中引用它。这不是“胶带”,它是唯一正确的解决方案。 – Brad

+0

给了这个镜头,我现在得到这个错误: 错误:ENOENT:没有这样的文件或目录,打开'/root/ExerciseApp/node_modules/forever/bin/views/layouts/main.handlebars' –

-2

当您从node_modules永久运行时,您的工作目录完全没有用。相反,添加一个“启动”脚本到你的package.json:

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

这种方法使用永远你的package.json指定的版本,并且不需要任何与-g进行安装。此外,工作目录将是具有app.js的相同文件夹,并且一切都应该正常工作。

现在,任何系统上的任何用户都应该能够运行npm install,然后npm start,并立即启动并运行您的应用。

+0

没有必要这样做。只需使用适当的目录引用应用程序即可正确解决问题。 – Brad

相关问题