私は、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 }
終わり
終わり
それを解決する方法がわかりません。
タンク・ユー!