

現在、WebサービスをRuby on Rails で開発しております。  
※BtoB向けの社内ツール

しかし、以下の要因から、一部機能をpythonにて実装したいと考えております。

・webサイト内で高度な数値計算を行う際にrubyよりかはpythonの方が簡単にでき、かつ、pythonであれば、そのノウハウを持っている。

・協力していただいているメンバーがpython経験者でRuby未経験が複数名いる。

すべてをpythonでやるという選択肢も考えましたが、最終的にはメインをrailsでやり、一部pythonを組み込むという方針でやりたいと考えております。

そのような方法は可能なのでしょうか？

rails でいうところの link_to のようなヘルパーメソッドからpythonスクリプトを呼び出せるのかがよくわかりませんでした。  
※link_toに限らずですが、ページ遷移や動的にpythonスクリプトが実行できるようであれば、そうしたいです。

宜しくお願いします。


CC BY-SA 3.0
2015-11-10T16:01:03.140
18632
2015-11-10T19:31:10.600
13175
question
ruby-on-rails ruby python
railsのwebシステム内にpythonのスクリプトを共存させることは可能でしょうか？


いろいろやり方はあります。簡単な順に書きますと

  1. `IO.popen`などのプロセス間通信を使ってRubyからPythonのプログラムを呼び出す
  2. FlaskやDjangoなどで別のウェブを裏で立ち上げて、RoRからはリバースプロキシでアクセスする。
  3. redisなどでタスクキューを作って、RoRからは計算タスクをジョブ番号と共にタスクキューに追加する。ジョブ番号をブラウザに通知する。Pythonはタスクが入る度に計算して、ジョブ番号をキーにして結果をDBに保存。ブラウザはジョブ番号でRoRに結果を問い合わせ。ステータスを表示  
(計算待ち、計算中、計算済み）。計算済みなら結果を表示。

3のやり方は、例えばPythonの計算が重たくて数分以上かかるときに特に有効です。計算終了を待たずに、ブラウザに瞬時にレスポンスを返せます。また、計算用のサーバーの負荷が高くなりすぎないように、同時に走る計算タスクの数を制限することができます。もし負荷が高くなるようなら、計算用サーバー（ワーカー）を増やして分散処理することも可能です。


CC BY-SA 3.0
2015-11-10T19:31:10.600
18640
2015-11-10T19:31:10.600
7837
18632
answer