質問: 現在、WebサービスをRuby on Rails で開発しております。 ※BtoB向けの社内ツール しかし、以下の要因から、一部機能をpythonにて実装したいと考えております。 ・webサイト内で高度な数値計算を行う際にrubyよりかはpythonの方が簡単にでき、かつ、pythonであれば、そのノウハウを持っている。 ・協力していただいているメンバーがpython経験者でRuby未経験が複数名いる。 すべてをpythonでやるという選択肢も考えましたが、最終的にはメインをrailsでやり、一部pythonを組み込むという方針でやりたいと考えております。 そのような方法は可能なのでしょうか? rails でいうところの link_to のようなヘルパーメソッドからpythonスクリプトを呼び出せるのかがよくわかりませんでした。 ※link_toに限らずですが、ページ遷移や動的にpythonスクリプトが実行できるようであれば、そうしたいです。 宜しくお願いします。
回答: いろいろやり方はあります。簡単な順に書きますと 1. `IO.popen`などのプロセス間通信を使ってRubyからPythonのプログラムを呼び出す 2. FlaskやDjangoなどで別のウェブを裏で立ち上げて、RoRからはリバースプロキシでアクセスする。 3. redisなどでタスクキューを作って、RoRからは計算タスクをジョブ番号と共にタスクキューに追加する。ジョブ番号をブラウザに通知する。Pythonはタスクが入る度に計算して、ジョブ番号をキーにして結果をDBに保存。ブラウザはジョブ番号でRoRに結果を問い合わせ。ステータスを表示 (計算待ち、計算中、計算済み)。計算済みなら結果を表示。 3のやり方は、例えばPythonの計算が重たくて数分以上かかるときに特に有効です。計算終了を待たずに、ブラウザに瞬時にレスポンスを返せます。また、計算用のサーバーの負荷が高くなりすぎないように、同時に走る計算タスクの数を制限することができます。もし負荷が高くなるようなら、計算用サーバー(ワーカー)を増やして分散処理することも可能です。