1

この行を含むボックスの Vagrantfile 構成を作成し、同期フォルダーのアクセス許可を 777 に設定して、完全に書き込み可能であることを確認しました。

dev.vm.synced_folder "apps/", "/httpd", :owner=> 'stella', :group=>'stella', :mount_options => ['dmode=777', 'fmode=777']

CentOS 6.4 vagrant ボックスを起動して ssh を実行すると、次のことが確認できます。

$ ls -la /httpd
drwxrwxrwx.  1 stella stella  442 Nov 11 09:33 june

これを index.js ファイルの先頭に挿入できます。

fs.writeFile("/httpd/june/test", "Hey there!", function(err) {
    if(err) {
        console.log(err);
    } else {
        console.log("The file was saved!");
    }
});

node index.jsノードを実行すると、スクリプトが実行され、ファイルが正常に作成されます。これは、ノードがプロジェクトのルート パスに新しいファイルを正常に書き込めることを確認するためのすべてです。また、プログラムを同期フォルダーの外に移動しましたが、問題なく動作します。

私が抱えている問題は、ソケットの作成に関するものです。プロジェクトのルート パスにソケットを作成することが期待される有名なノード モジュールがいくつかありますが、Error: Operation not permittednode.js がソケットを作成しようとしてプログラムが終了するたびにエラーが発生します。

作成しようとしているソケットは次のとおりです。
- 127.0.0.1:3005
- 127.0.0.1:3006

Node.jsが共有/同期フォルダーにソケットを作成することは不可能であると述べているこのブログ投稿以外に、この問題についてオンラインでほとんど何も見つけることができませんでした。

私が使用しているノード モジュールは、cluster-master と zmq です。https://github.com/isaacs/cluster-master/blob/master/cluster-master.js#L119の行に到達すると、cluster-master はシャットダウンします。

サーバーをポートにバインドしようとすると、node-zmq がシャットダウンします (どうやら、できる限り多くの情報を提供するために、2 つ以上のリンクを投稿することはできないようです!) lib/index.js の 218 行目、Socket.prototype.bind 関数に到達すると、サーバーは強制的にシャットダウンされます。

パーミッションの問題だと思った理由は、これらのモジュールの両方が、正常に開始されたときにプロジェクトのルートにファイルを書き込むためです。ソケットの場合は ZMQ、REPL の場合は Cluster-Master です。プロジェクトを次の場所に移動すると、たとえば / var/www/june 何の問題もありません。プログラムが起動し、cluster-master と zmq がファイルを書き込み、ポート経由で問題なく通信できます。

私の問題は、Vagrant 同期フォルダーにのみあります。

この方法で共有フォルダーにソケットを作成することは本当に不可能かどうかを尋ねていると思います。もしそうなら、回避策として何かできることはありますか?

私のチームと私は VM が実行されているかどうかに関係なくファイルで作業でき、ホスト マシンで IDE 環境を使用できるなどの理由から、アプリを共有フォルダーに保持することが望ましいです。

更新: cluster-master で、ソースの行を変更すると:

var socket = path.resolve('cluster-master-socket')

に:

var socket = path.resolve('/tmp/cluster-master-socket')

cluster-master が原因でサーバーが終了しなくなりました。ただし、ZMQ のような簡単な修正は見当たりません。これは実際に、エラーの原因、ファイルの書き込み、またはソケットのオープンについて、私を混乱させますか?

4

0 に答える 0