2017-06-16 7 views
1

私はこのコマンドでうまく動作できるNode.jsアプリケーションを持っています:node app.js。それは起動し、私は私のサーバーアドレスに行くことができ、それはアプリが動作して参照してください。しかし、私が永久にアプリケーションを実行しようとすると(ログインしていなくても私のサーバ上でアプリケーションを実行させようとすると)、次のコマンドを使用します:Node.jsはnodeコマンドでは動作しますが、永遠には動作しません

は、ここに私のディレクトリ構造です:ここで

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(だろうよ「永遠に」あなたがでているディレクトリ内と呼ばれるバイナリを実行しよう

次の2つの選択肢があります。

をa)のメインディレクトリから永遠に私は

あなたに言った方法を実行します

b)app.jsの絶対パス、../../../../node_modules/foreverへの相対パスを使用してください。

私はa)をお勧めします。

+0

これは「永遠」の場所には問題ありません。彼らが地元の「永遠に」走りたいなら、確かにできる!ここでの問題は、アプリ内の不正なパス参照と関係しています。 – Brad

+0

私は 'forever start ../../../app 'を実行しようとします。js'を '〜/ ExerciseApp/node_modules/forever/bin'から削除します。エラーが発生しました:' forever:command not found' –

+0

@TaylorLiss永遠にグローバルにインストールする必要があります。 "sudo npm install forever -g"を実行してみてください。その後、app.jsディレクトリ内の "forever start 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

関連する問題