草庐IT

ruby-on-rails - 为什么使用 Sidekiq 的 redis 命名空间不起作用?

我在同一台服务器上运行我的生产和暂存环境。我正在尝试根据正在运行的环境设置命名空间。例如,我不希望我的生产环境处理暂存环境排队的电子邮件,反之亦然。我在我的本地环境中使用相同的代码。代码如下:#config/initializers/sidekiq.rbSidekiq.configure_serverdo|config|config.redis={url:'redis://localhost:6379/0',namespace:"sidekiq_app_name_#{Rails.env}"}endSidekiq.configure_clientdo|config|config.redi

ruby-on-rails - 运行 Rails + Sidekiq 的 2 台服务器使用相同的 redis 服务器会导致意外行为吗?

我计划迁移我的2个sidekiq实例以使用1个Redis数据库。我担心竞争条件可能存在问题。这样做安全吗?我目前在负载均衡器后面有2个生产中的Rails服务器。每个服务器都被克隆,运行一个Rails应用程序、sidekiq和一个Redis数据库。暂存环境具有相同的设置。但是,我已将两个sidekiq实例连接到一个Redis数据库。到目前为止,我没有遇到任何问题,但是暂存环境没有看到太多流量,无法看到任何明显的效果。 最佳答案 您至少应该为暂存和生产使用不同的Redis数据库,这样来自一个环境的任务不会最终在另一个环境中运行。在您当前

ruby-on-rails - 开发环境中的 Sidekiq

我有一个将sidekiq与redis结合使用的长期项目,我相信只有在升级到sidekiq3+之后才开始出现问题。问题是,如果不先启动redis服务器,我就无法在开发中运行我的rails(4.1.4)应用程序。我在启动rails服务器时遇到的错误与我在不首先启动redis的情况下尝试运行bundleexecsidekiq时遇到的错误相同。在没有运行redis的情况下运行我的Rails应用程序以前从来都不是问题,即使sidekiq的设置方式相同。即使我不打算运行sidekiq,有人可以建议一种无需启动redis服务器的方法吗?这是回溯:/Users/mark/.rbenv/versions

ruby-on-rails - 使用 Sidekiq 的 Redis 连接池实现 Multi-Tenancy (命名空间)设置

除了Sidekiq,我还有一个worker也大量使用Redis来存储key。由于Sidekiq维护它自己的redis连接池,工作人员利用它并始终通过Sidekiq的池进行连接。classMyRedisWorkerincludeSidekiq::Workerdefperform#...enddefrun_redis_cmd(cmd,*args)Sidekiq.redis{|conn|conn.send(cmd,*args)}endend我现在转向Multi-Tenancy模型,允许多个租户在同一个应用程序实例和数据库上运行(在Postgres中,这对应于为每个租户使用不同的schema)

ruby-on-rails - 减少sidekiq作业的执行时间

我目前正在开发一个涉及在Rails服务器上同步联系人的应用程序。我正在使用redis服务器和sidekiq在后台执行联系人同步。我的数据库是mongodb,我使用mongoidgem作为ORM。工作流程如下:手机上的联系人通过app传递给railsserver,然后在railsserver上,在redisserver中排队。现在cron作业触发连接到redis并完成作业的sidekiq。sidekiq的一个Job如下:它有联系人数组(最大3000)。它必须处理每个联系人。我所说的处理是指对数据库进行插入查询。现在的问题是sidekiq花费了大量的时间来完成这项工作。完成这项工作平均需要

ruby-on-rails - 将元数据保存到 Sidekiq 上的作业

使用Sidekiq时是否可以将元数据保存到作业中?例如,我想将验证作为后台作业执行,这样当它完成时,遇到的任何错误都将作为元数据保存在作业中。如果这是可能的,我是否仍然能够在作业完成或停止后恢复此元数据?提前致谢。 最佳答案 Sidekiq不是开箱即用的,但我已经用sidekiq-status完成了这个例如,在您的场景中,它看起来像这样:classValidatorJobincludeSidekiq::WorkerincludeSidekiq::Status::Workerdefperform(*args)#Runvalidatio

ruby-on-rails - Sidekiq worker 内部的 Redis 性能不佳

我有一个Rails应用程序,它运行50个并发的Sidekiqworker,从外部API接收数据,对其进行操作并将其存储在数据库中。为了防止多次存储相同的数据,我创建了唯一的字符串,并将其存储到Redis中。r=Redis.currentr.pipelineddooptions.eachdo|o|r.setex(o.generate_index,1.hour,o.value)endend在将新对象保存到数据库之前,我检查Redis中是否存在它的唯一字符串:r=Redis.currentoption_ids=r.pipelineddonew_options.eachdo|o|r.get(o

ruby-on-rails - Sidekiq 服务器进程如何从 Redis 中的队列中拉取作业?

我有两个Rails应用程序在两个不同的实例上运行(比如Server1和Server2),但它们具有相似的代码并共享相同的Postgresql数据库。我安装了Sidekiq并从两台服务器将作业推送到队列中,但我只在Server1中运行Sidekiq进程。我有一个Redis服务器,它在Server1上运行,它与Server2共享Redis。如果从Server2推送的作业在Server1的Sidekiq进程中得到处理,这正是我真正想要的。我的问题是Server1上的Sidekiq进程如何知道Redis中推送了一个作业?Sidekiq进程是否持续检查Redis服务器是否有任何新作业,或者Red

ruby-on-rails - 如何在 Rails 中的 Redis 和 SideKiq 中顺序处理队列?

我在我的应用程序中使用Rails4,这就是我创建新工作的方式:classFetchJob此代码打印出num的值,然后休眠30秒。我正在使用sidekiqgem和redis来处理这个队列。我在创建用户后对作业进行排队。classFecthJobController队列中的作业正在并行执行。队列中的作业是指job1、job2、job3、job4等。那么我怎么可能按顺序执行这些作业。即只有当job1完成时,它才会处理job2,然后是job3,依此类推。如何在sidekiq中锁定它直到作业完成? 最佳答案 您可能会发现一个hack可以让您做

ruby-on-rails - Rails 如何判断 sidekiq worker 是否已完成 perform_async

我正在努力将广泛的后台任务外推给sidekiq工作人员(第一次使用sidekiq)。我已经能够让它正常运行。但我不确定如何检查sidekiqworker的进度-检查worker是否已完成perform_async函数的最佳方法是什么?AutoWorkersidekiq任务:classAutoWorkerincludeSidekiq::Workerdefperform(lead_id,cars)logger.info"WORKERCREATED"lead=Lead.find(lead_id)response=ZipCodeCheck.new(cars:cars,lead:lead).ex