heroku - Resque失去与heroku上redis的连接

标签 heroku redis resque ruby-grape

我在 heroku 上运行一个应用程序。 Web Worker是在Grape框架下开发的。

由于 Grape 没有配置/初始化器之类的东西,我在每次访问 Resque 之前运行这样的代码:

HEROKU_REDIS_URL = "redis://redistogo:XXXXX@squawfish.redistogo.com:9990/"
uri = URI.parse(HEROKU_REDIS_URL)
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password, :thread_safe => false)

一段时间后,Resque worker 停止从 Redis 中获取作业,即使有些作业已经在那里排队。在本地运行时一切正常。

知道我做错了什么吗?或者Resque的Redis初始化应该放在什么地方?

最佳答案

经过几个小时的调试,我让它工作了。让我分享一下我的设置中哪些部分有问题:

  • :thread_safe => true:Redis 实例应该创建为线程安全的。不确定在这种情况下这意味着什么,在 Redis 源代码中没有找到任何内容,但这就是他们在以下内容中的建议:http://redistogo.com/documentation/resque
  • 确保为 Web 服务器和工作进程将 redis 仅分配给 Resque 一次:我最终得到了这样的代码:

      require 'resque'
      if ENV["REDIS_SERVICE"]
        begin
          Resque.redis.get('abc')
        rescue Redis::CannotConnectError
          HEROKU_REDIS_URL = "redis://redistogo:XXXXX@squawfish.redistogo.com:9990/"
    
          uri = URI.parse(HEROKU_REDIS_URL)
          Resque.redis = Redis.new(
            :host => uri.host,
            :port => uri.port,
            :password => uri.password)
    
        end
      end
    

    我将它放在 app/resque_redis_init.rb 中,并在 resque:setup 任务中的 Web 应用和 worker Rakefile 中都需要

  • 确保没有任何东西使用同一个 Redis 服务器:我发现另一个 heroku 应用程序中的一个工作人员将这个 redis 设置为 resque 并不断吃掉队列中的作业。工作人员配置错误,工作在我没有注意到的情况下失败了
  • 确保您的 Redis 中没有垃圾:我必须清除 Redis 的所有内容以确保没有注册错误的工作人员。
  • 确保您在正确的队列中对作业进行排队,并且这些作业具有正确的优先级对我来说,这是 Procfile 中的以下设置

    resque: TERM_CHILD=1 VERBOSE=1 QUEUES=activity,polling bundle exec rake jobs:work
    

有了这个设置,它工作得很好。希望它对某人有所帮助,因为那里没有太多关于非 Rails 应用程序的文档。

关于heroku - Resque失去与heroku上redis的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18798095/

相关文章:

ruby-on-rails - 如何查明一组 Resque 作业是否已完成?

python - 通过requirements.txt正确安装依赖项或如何正确安装已编辑的依赖项

ruby-on-rails - 如何增加 Heroku 30s h12 超时

kubernetes - 从 Kubernetes 中的另一个 pod 引用 Helm Redis master

Spring Redis - 主条目过期后未删除索引

ruby-on-rails - "god"没有启动 resque worker

ruby - 我如何编写 "if a process is running for longer than n seconds, kill it"的 Resque 条件?

ruby-on-rails - 如何确定在Heroku Performance dyno上运行的Puma worker 和线程的正确数量?

ruby-on-rails - BCrypt 3.1.2 更新导致 Heroku 推送失败

python - Redis-py是否支持unicode和utf-8以及它是如何工作的