1

Rails 3.2.8でユーザー用の外部プログラムを実行するWebサービスを設計していますが、予想されるユースケースは次のとおりです。

1)ユーザーがパラメーターのフォームに入力し、リクエストを送信します

2)Railsは、ユーザーの要求に基づいてMatlabプログラムを実行します。それは数分(3分未満)続き、プログラムが終了したことを示す結果ファイルを生成します

3)このプロセス中に、ユーザーをページにリダイレクトすると、「読み込み中」ステータスが表示され、結果ファイルが生成されたかどうかが監視されます

4)結果ファイルが生成されたら、AJAXを介してページをリロードし、結果を表示します。

そうするための「レール」の方法はありますか?以前、JAVA SSHフレームワークでこれを実行しましたが、かなり苦痛でした。必要なツールは何ですか?たとえば、タスクキューを管理するためにbackgroundjobのようなgemが必要ですか?または、これを処理できる「ワンスタンド」の宝石はありますか?ありがとう!

4

2 に答える 2

0

いくつかのジョブキュープロバイダーの1つを使用します。例としては、DelayedJob(これまでで最も単純なもので、追加のピースは必要ありません)、Resque、Sidekiq(はるかに高速ですが、それらを使用するには小さなRedisサーバーが必要です)があります。

「ジョブ」は(プロバイダーによって異なりますが)実行を実装するクラスまたはインスタンスになります。シェルで何かを実行することを意味する場合は、次のように実行できます

%x[matlab command --options > output.ext]

(これは単なる例であり、文字列補間も使用できます%x[#{executable_name}]:)

于 2012-10-08T13:06:53.757 に答える
0

私は、プロセス全体で何を使用するかを親切に理解しました。

1)ユーザーがパラメーターのフォームに入力し、リクエストを送信します

次のRailsキャストのメソッドを使用します。サーバー側の検証にはhttp://railscasts.com/episodes/219-active-modelを使用し、クライアント側のチェックを有効にするにはgem'client-side-validations'を使用します。

2)Railsは、ユーザーの要求に基づいてMatlabプログラムを実行します。それは数分(3分未満)続き、プログラムが終了したことを示す結果ファイルを生成します

タスク管理にgem'DelayedJob'を使用し、Matlabプログラムを開始するために'ChildProcess'を使用します。

3)このプロセス中に、ユーザーをページにリダイレクトすると、「読み込み中」ステータスが表示され、結果ファイルが生成されたかどうかが監視されます

子プロセスと結果ファイルの存在を監視して、タスクが終了したかどうかを確認します。

4)結果ファイルが生成されたら、AJAXを介してページをリロードし、結果を表示します。

このRailsキャストからのポーリング方法を使用して:http://railscasts.com/episodes/229-polling-for-changesで結果ページを更新します。ポーリングはより軽量なソリューションであり、私の要件を満たすことができるため、より安全ですが、プッシュは使用していません。

明らかに、これはベストプラクティスではありませんが、私のニーズを満たし、実装が簡単です。すべてのコメントと回答をありがとう。

于 2012-10-13T04:04:49.267 に答える