私は、delayed_jobs を使用してバックグラウンドでタスクを実行しています。
ajax を使用してタスクを開始しています。ワーカーは uuid を取得し、タスクのステータスと結果をキャッシュするために書き込みます。
次に、別の ajax を使用して毎秒ポーリングし、結果が得られたかどうかを確認します。
私のローカルホストではうまく動作しますが、heroku にアップロードするとうまくいきません。
ログを確認したところ、ワーカーは書き込み済みのキャッシュを読み取ることができますが、メイン スレッドがアクセスしようとすると空になります。
シンサーバー、memcachier、dalli を使用しています。
これは、キャッシュへの書き込みに使用されるコードです。
def self.get_meta_info(link_url,job_uuid) 始める #………… 結果 = { タイトル:「ここにあるもの…」 } #………… Rails.cache.write({job_uuid: job_uuid,type: '結果'},result.to_json) Rails.cache.write({job_uuid: job_uuid,type: 'ステータス'},'成功') #次の行はログのデータを返します Rails.logger.info("#{job_uuid} のハッシュに書き込まれた get_meta_info") Rails.logger.info("#{job_uuid} の get_meta_info の結果: #{Rails.cache.read({job_uuid: job_uuid,type: 'result'})}") レスキュー例外 => ex Rails.cache.write({job_uuid: job_uuid,type: '結果'},ex) Rails.cache.write({job_uuid: job_uuid,type: 'ステータス'},'エラー') 終わり 終わり
これは、ポーリングに使用するサーバー側のコードです: (毎秒 ajax によって呼び出されます)
def get_meta_info_result job_uuid = params[:job_uuid] status = Rails.cache.read({job_uuid: job_uuid,type: 'ステータス'}) #次の行はログに何も返さない Rails.logger.info("nlp_provider_controller.get_meta_info_result for uuid #{job_uuid} read status #{status}") Rails.logger.info("nlp_provider_controller.get_meta_info_result for uuid #{job_uuid} 読み取り結果 #{Rails.cache.read({job_uuid: job_uuid,type: 'result'})}") Respond_to do |フォーマット| ステータス==「成功」の場合 format.json {render json: Rails.cache.read({job_uuid: job_uuid,type: 'result'})} elsif ステータス=='エラー' format.json{render :nothing => true, status: :no_content } そうしないと format.json{render :nothing => true, status: :partial_content } 終わり 終わり
それを解決する方法がわかりません。
タンク・ユー!