我正在使用delayed_jobs 在后台运行任务。
我正在使用 ajax 开始一项任务,工作人员获取一些 uuid 并写入以缓存任务的状态和结果。
然后我使用另一个 ajax 每秒轮询一次,看看我是否得到了结果。
它在我的本地主机上运行良好,但是当我上传到 heroku 时却不行。
我检查了日志,我可以看到 worker 可以读取它写入的缓存,但是当主线程尝试访问它时它是空的。
我正在使用瘦服务器、memcachier 和 dalli。
这是用于写入缓存的代码:
def self.get_meta_info(link_url,job_uuid) 开始 #....... 结果 = { 标题:“这里的东西......” } #....... Rails.cache.write({job_uuid: job_uuid,type: 'result'},result.to_json) Rails.cache.write({job_uuid: job_uuid,type: 'status'},'success') #the next to lines 返回日志中的数据 Rails.logger.info("get_meta_info 写入哈希 #{job_uuid}") 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: 'result'},ex) Rails.cache.write({job_uuid: job_uuid,type: 'status'},'error') 结尾 结尾
这是我用于轮询的服务器端代码:(它由 ajax 每秒调用一次)
def get_meta_info_result job_uuid = 参数[:job_uuid] status = Rails.cache.read({job_uuid: job_uuid,type: 'status'}) #the next to lines 在日志中不返回任何内容 Rails.logger.info("nlp_provider_controller.get_meta_info_result for uuid #{job_uuid} 读取状态 #{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 做 |格式| 如果状态=='成功' 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 } 结尾 结尾
我不知道如何解决这个问题。
保护你!