0

我正在使用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 }
      结尾
    结尾

我不知道如何解决这个问题。

保护你!

4

1 回答 1

0

两天解决这个问题。愚蠢的错误。

有两个配置,development.rb 和 production.rb。并不是我不知道,而是通常我在单独的初始化程序中进行配置。

我在开发中而不是在生产中配置了 Redis。

添加:

redis_url = ENV["REDISTOGO_URL"] || "redis://127.0.0.1:6379/0/MyApp"
MyApp::Application.config.cache_store = :redis_store, redis_url

(基于:http ://blog.jerodsanto.net/2011/06/connecting-node-js-to-redis-to-go-on-heroku/ )

它有效。

于 2013-06-02T12:59:57.483 回答