1

この質問はあいまいな問題です - 長々と申し訳ありません。アプリを Heroku にデプロイしようとしています。このアプリは、統計レポートを実行するために、R 言語のデーモンであるRserveを実行します。これは原則として、memcached などのデーモンを Heroku で実行するのと同じくらい難しくありません。

Mac OSX では、コマンド ラインでデーモンを起動するだけで、それを忘れてしまいます。すべて問題なく動作します。https://github.com/albertosantini/node-rioを使用して、node.js から Rserve とやり取りしています(ただし、ここでは要因ではありません)。

しかし、Heroku へのデプロイでは、あまり運がありませんでした。Rとノードのマルチパックを使用しています。インストールは正常に実行され、すべてのビルドステップは正常に終了し、R は正常に起動します。

次に、ワーカー dyno で Rserve デーモンを開始します。

私のprocfileは次のようになります:

web: node server.js
worker: R CMD Rserve --no-save

実行すると、ログに次のエラーが表示されます (ブロックの最後までスクロールします)。

Rserv started in daemon mode.
heroku[worker.1]: State changed from starting to crashed

Rserve() の構成ドキュメントはこちら: http://www.rforge.net/Rserve/doc.html ?

奇妙なことに、Heroku 実行コンソールからエラーなしでこれを実行できますが (以下を参照)、node.js からアクセスしようとすると、実際には実行されていないようです。

heroku run R CMD Rserve

[以前に保存されたワークスペースが復元されました]

Rserv がデーモン モードで起動しました。>

node.js ( heroku run node) で、次のようにテストしてみます。

var rio = require('rio');
rio.evaluate("pi / 2 * 2");

これにより、「Rserve 呼び出しに失敗しました」というエラーが表示されます。

これは、私がやろうとしていること、または私がやろうとしている方法に根本的に何か問題があると考えるように導きます.

4

2 に答える 2

2

Rserve はデフォルトでデーモンとして実行されるため、スクリプトを使用して実行し、「プロセス内」で実行します。

例えば

# example R script for executing Rserve
require('Rserve')

# get the port from environment (heroku)
port <- Sys.getenv('PORT')

# run Rserve in process
run.Rserve(debug = FALSE, port, args = NULL, config.file = "rserve.conf")

そして、Procfile次のようなエントリがあります。

rserve: R -f rserve.r --gui-none --no-save
于 2013-10-27T10:14:02.630 に答える
0

そのため、ワーカー dyno で起動する方法を 12 通り試しましたが、すべてクラッシュしてしまいました。私はすべての環境問題の真相を突き止めたことはありません。私は Unix の専門家ではありません。ただし... Web dyno の server.js 初期化スクリプトの最後で子プロセスを生成して Rserve を実行することで、機能しました。できます。

childProcess.exec('R CMD Rserve --no-save', function (error, stdout, stderr) {});

私の計画は、この方法でワーカー プロセスに実装し、Web ワーカーを使用して別々の環境間で通信することです。

于 2013-07-22T14:06:24.540 に答える