1

厄介な問題があります。それは、画面でnodejsを実行するのに問題があることです。画面を離れるのと同じくらい速く、ソケットが接続されていないため、次に接続する相手は、画面が再び開かれるまでエラーメッセージが表示されます。screen -R nodeたとえば、画面が開くとすぐに、接続の受け入れが再開されます。

ただし、画面が閉じていて(バックグラウンドで実行されている)、誰かがすでにソケットを開いている場合は、新しい接続に応答し続けることに注意してください。

アプリケーションを再起動しようとすると、コマンドnode appを使用して次のメッセージが表示されます。

module.js:340
    throw err;
          ^
Error: Cannot find module '(unreachable)/square_defense/app'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

サーバーサイドコード

var app = require('express')()
  , server = require('http').createServer(app)
  , io = require('socket.io').listen(server);

server.listen(3000);

app.get('/', function (req, res) {
  console.log(__dirname);
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
    socket.on('user-message', function (data) {
        console.log(data);
        sendMessage.call(socket, data.message);
    });
});
var sendMessage = function(message) {
      this.emit('server-message', {message: message});
      this.broadcast.emit('server-message', {message: message});
}

私はapp.jsからのnpm install appディレクトリのような多くのことを試しました。..なぜ働きたくないのか理解できません。クラッシュしないテスト目的で使用できるサーバーが本当に必要です。

編集:これは暗号化されたホームフォルダと関係があると思いますか?

到達不能なフォルダが問題のある場所だと思います。エラー:モジュール' (到達不能) / square_defense/app'が見つかりません。しかし、なぜこれが起こっているのかわかりません。現在、Foreverでアプリケーションを実行しており、sshセッションを開始するとすぐに機能します。しかし、接続を終了してページをリロードするとすぐに。エラーが発生します。

4

2 に答える 2

3

あなたが言ったように、あなたのホームディレクトリは暗号化されており、Ubuntuのドキュメントによると:

このディレクトリは、ログイン時に自動的にマウントされ、ログアウト時にマウント解除されます。

だからあなたの推測は正しいです、これはエラーを引き起こしているものとまったく同じです。ユーザーはまだログインしているため、デタッチされscreenたセッションの実行はOSによって考慮されません*。ユーザーのすべてのシェルセッションが終了すると、暗号化されたホームディレクトリがマウント解除されました。


解決策:アプリを以外のディレクトリに移動できます。そうすれば、 GNUScreenまたはforever$HOMEのどちらでもエラーなしで作業を実行できると思います。†</p>


*これは自分でテストできます:ログイン、screenセッションの開始、実行vim、デタッチ; コマンドwを使用して、誰がログインしていて、何をしているかを確認します

†このために独自の起動スクリプトを作成する場合でも、アプリファイルが自動暗号化されたホームディレクトリに配置されないことが重要だと思います。

于 2013-01-16T16:01:45.080 に答える
0

あなたはすでにUbuntuボックスを使用しているので、この投稿で説明されているようにUpstartmonitを使用することをお勧めします:http: //howtonode.org/deploying-node-upstart-monit

私がミックスに追加したのは、ポート80でアプリケーションを提供するためのフロントエンドプロキシサーバー(私の場合はHAProxyですが、nginxも機能します)だけでした。

約1か月前に、このテクノロジースタックを使用してsocket.io/expressアプリをAmazon EC2にデプロイしましたが、すばらしい結果が得られました。

編集:

node.js / nginx / monit / gitを使用した適切な本番環境のセットアップに関して、時間をかけて収集したリソースを次に示します。

私は本当に最初のものをお勧めします、あなたはいくつかの部分(npmモジュールのインストールやシステムセットアップなど)をスキップしなければならないかもしれませんが、nginx/gitとsupervisorに関する部分は読む価値があります。

于 2013-01-16T13:53:52.760 に答える