我对在Rails中使用异步作业(job)还相当陌生,我刚刚习惯Sidekiq.

例如,当我编写连接到side kiq以清除队列的rake任务时,我看到一组队列,其中包括一些定制的命名队列,这些队列是我不久前在我的机器上作为另一个应用程序的一部分创建的.这些队列不包含由我的应用程序启动的作业(job)(我一直在用邮件程序测试这一点)

当我从Rails控制台连接到Sidekiq时,我得到了Sidekiq实例,当我调度作业(job)时,它似乎正在被应用程序使用,并且可以看到我调度的邮件作业(job).

从这两个场景中判断Sidekiq.redis_info可以得到几乎相同的信息,并且使用的Redis服务器也是相同的.当我关闭redis服务器时,我无法从任务或控制台连接到Sidekiq.

您知道为什么会发生这种情况吗?我如何才能从rake任务连接到正确的Sidekiq实例?

使用Ruby 2.7.8,rails 5.2.6,这是我在rails中的idekiq的初始化器:

rails_root = Rails.root || File.dirname(__FILE__) + '/../..'
rails_env = Rails.env || 'development'
redis_config = YAML.load_file(rails_root.to_s + '/config/redis.yml')
redis_config.merge! redis_config.fetch(Rails.env, {})
redis_config.symbolize_keys!
Sidekiq.configure_server do |config|
  config.redis = { url: "redis://#{redis_config[:host]}:#{redis_config[:port]}/12", namespace: "one-api" }

  config.super_fetch!
end

Sidekiq.configure_client do |config|
  config.redis = { url: "redis://#{redis_config[:host]}:redis_config[:port]}/12", namespace: "one-api" 
}
end

推荐答案

Redis是保存作业(job)的地方,因此,如果两个应用程序都配置为将作业(job)存储在同一个redis位置,那么无论您运行哪个版本的side kiq,旧作业(job)都会自然地保留在那里.

理想情况下,您应该为新应用程序使用新的/不同的Redis DB.有many different ways个数据库可以为Sidekiq配置redi,但是您感兴趣的是数字,所以您不想使用您正在使用的任何数据库(12?),而是希望使用默认redis安装中可用的其他15个数据库中的一个.

如果您不再使用旧的应用程序,那么您也可以保留您的配置,只需从适当的数据库中删除所有密钥(从12个数据库的shell 命令行中):

> redis-cli -n 12 FLUSHALL

Ruby-on-rails相关问答推荐

form_with正在try 用错误的路径生成操作

Puma 工作人员无法在 Ubuntu 20.04 VM 上的 Rails 5.2 中启动

创建大哈希的 Ruby 方法

Ruby on Rails 让外键工作

设计 token_authenticable 已弃用,有什么替代方案?

Rails 3 应用程序的 MySQL 集群 (NDB) 与 MySQL 复制 (InnoDB):优点/缺点?

如何将动态 Ruby 代码嵌入到 Slim 模板中的javascript部分?

Rails 4 Form: has_many through: checkboxes

Rails ActiveRecord 查询日期范围

Rails 4网站图标问题

Rails如何对列求和?

在 ruby​​ on rails 上构建方法

在 PostgreSQL 中强制字符串的最大长度

在 Rails 应用程序中处理大文件上传的最佳方法是什么?

ActiveRecord 查找现有表索引

如何打印出范围之间的随机数?

反编译开发assets资源 管道

在 Ruby on Rails 中的控制器中获取 URL 的锚部分

ActiveRecord 查找以

如何获取 Rails 3.1 中assets资源 的绝对 URL?