出沢さん、こんばんは。
はじめまして。河内です。

時間がかかる処理は deleyed_job, resque, sidekiq などを使ってバックグラウンドで実行するのが良いかと思います。
バックグラウンドで実行されるコードの状態(計算中、完了、エラーなど)と得られた結果はDBなどに格納します。 Browser からは JavaScript で polling するなどして結果を適宜表示します。



2013年7月16日 21:36 dezawa <dezawa@aliadne.net>:
出沢です

事情が有って RAILS_GEM_VERSION = '2.2.3' on Linuxです


複数の解が有り、一つ出すのに20〜60秒かかる問題があります。
これを次の様にしたいと思っています
  (1)最初の解が出た所でまずそれを表示する
  (2)その解を見てもらっている間に残りの解をとく
  (3)解が出る毎にリンクを貼り替える。
       (求まった解の数のリンク、だんだん増える)
  (4)ユーザはリンクをつついて解を比較する
もしくは
  (1')解が出る前に戻る。答えが無い画面。
  (2')解をひたすら作る

この(1)(2)、ないし(1')(2')を実装するために
  (A)forkしchildで解を求めつづける
  (B)forkしchildで戻り、親で解を求めつづける
をこころみたのですが、
 (A)親が終わった時点でchildも終了する
 (B)500 - Internal Server Error で終わる
      ActiveRecord::Baseのmethodがおかしくなっている様で
   Model.find_by_attribute だと
       undefined method `find_by_attribute'
   Model.find(:conditions => ["attribute = ?",value)[0] だと
       (Couldn't find Model without an ID):
   というエラーがlogに残ります。

(1)(2)、ないし(1')(2')を実装するよい方法はないでしょうか。
この様な
  「複数解あり、解が出揃うのを待つのは時間がかかりすぎる」
場合に採る良い方法はないでしょうか

宜しくお願いします。

--
ML: rails@ruby.ml.fdiary.net
使い方: http://QuickML.com/



--
Takashi Kawachi
tkawachi at gmail.com