短いバージョン: Rails コントローラー (Rails 3 を使用) からサブプロセス (Ruby スクリプト) を起動し、サブstdout
プロセスから Web ページにメッセージをレンダリングし、Rails ビューからサブプロセスに情報を渡す必要があります。
セットアップ: Ivyと呼ばれるソフトウェア メッセージング バス システムと通信する Ruby スクリプトがあり、Ruby 1.9.3 を使用して、ネットワーク上の他の場所で実行されているハードウェアとの間で制御メッセージを送受信します。ここでは代替メッセージング システムを使用できません。Ivy に違いありません。スクリプトは現在、メッセージを に書き込みますstdout
。
問題 1: Rails アプリのコントローラーから、このスクリプトをサブプロセス (またはスレッド、提案を受け付けています) として起動したいと考えています。このスクリプトからメッセージを受信して、Web ページに表示できるようにしたいと考えています。これらのメッセージをデータベースに永続的に保存する必要はないため、Rails キャッシュを使用してメッセージを一時的に保存およびアクセスし、AJAX を使用して定期的に新しいメッセージのキャッシュをポーリングすることを検討していました。これは可能ですか?
問題 2:同じ Rails アプリが、Web ページから (たとえば、ユーザーがボタン、ドロップダウン、またはその他の UI 要素と対話することによって) コントロール メッセージを Ivy サブプロセスに送信できる必要があります。これにより、これらのコントロール メッセージは、ハードウェア。
Sidekiq、Delayed Jobなどの潜在的な解決策を調べましたが、ドキュメントを閲覧しても、これらの潜在的な解決策が問題1と2の両方を解決できるという決定的な証拠を見つけることができません。したがって、私の質問は次のとおりです。
- Sidekiq や DelayedJob のような既製のソリューションでこのタスクを処理できますか?
- これを達成できるように、すでにRailsに組み込まれている方法はありますか?
- この質問は意見に近いですが、とにかく質問します。私が Rails を追求する理由は他にもありますが、このタスクが非常に困難になる場合は、その理由は切り捨てられる可能性があります。Rails を使用してこのようなことを行うのは面倒なので、別の解決策を検討する必要がありますか?