Tag: sidekiq

sidekiq在此期间获得更多记忆? 我们怎么解决这个问题?

sidekiq运行很长时间,我们的16GB RAM接近满。 如果我们停止并重启,内存会下降。 我们的Rails应用程序版本是Rails 3.2.12和Ruby 1.9.3 我们如何解决这个问题?

Sidekiq没有找到Rails Active Job的记录

在模型中创建用户之后,作业将排队等待 user.rb after_create_commit :profile_photo_job def profile_photo_job message = “Add a profile photo” ReminderJob.set(wait: 1800).perform_later(self.id.to_s, message) end reminder_job.rb class ReminderJob < ApplicationJob queue_as :default def perform(user_id, message) if user_id user = User.find(user_id) end ##sending message notification here end end 但是,它经常在我的sidekiq控制台中抛出以下错误 ActiveRecord :: RecordNotFound:找不到’id’= 7749的用户处理器:User-MacBook-Pro.local:***** 生产中发生此错误。

Rails后台工作者总是第一次失败,第二次工作

我有一个sidekiq工作者在保存对象后触发: class Post < ActiveRecord::Base attr_accessible :description, :name, :key after_save :process def process ProcessWorker.perform_async(id, key) if key.present? end def secure_url key.match(/(.*\/)+(.*$)/)[1] end def nonsecure_url key.gsub('https', 'http') end end 工人看起来如下(它尚未完成……只是测试): class ProcessWorker include Sidekiq::Worker def perform(id, key) post = Post.find(id) puts post.nonsecure_url end end 奇怪的是,每次工作人员触发时,它最初会因以下错误而失败: undefined method `gsub’ for nil:NilClass 但是,当工人稍后重试时 – 它总是成功。 它真的感觉好像什么东西没有初始化它应该……但我似乎无法追踪它。

如何在capistrano部署后检测孤立的sidekiq进程?

我们有一个Rails 4.2应用程序,它与sidekiq进程一起运行以执行长任务。 不知何故,在几周前的一次部署中,有些事情发生了变化(capistrano部署过程没有有效地阻止它,无法弄清楚原因)并且还有一个孤立的sidekiq进程正在运行,正在与当前的进程竞争redis队列上的作业。 因为这个过程源已经过时,它开始在我们的应用程序上给出随机结果(取决于哪个过程捕获了这个工作),我们得到了非常困难的时间,直到我们想出这个… 我怎么能阻止这种情况再次发生? 我的意思是,我可以在每次部署后运行到VPS并运行ps aux | grep sidekiq ps aux | grep sidekiq检查是否有多个..但它不实用。

控制器找不到worker创建的对象

花了一整天试图解决这个问题.. 基本上控制器正在调用worker来执行“Balance”的创建。 工作程序执行成功并创建记录但是当它返回到控制器时,它找不到创建的对象。 如何强制它寻找“更新数据库”记录? 控制器: balance = BalanceCreator.perform_async(userx.id, market.id) 20.times do status = Sidekiq::Status::get balance, :exp_status if [“done”].include?(status) break end sleep(0.2) end statux = Sidekiq::Status::get balance, :exp_status puts statux # Shows correct status exp_id = Sidekiq::Status::get balance, :exp_id puts exp_id # Shows correct id user_exp = Balance.find(exp_id) # Error – WARN: Couldn’t find Balance with […]

查询sidekiq排队的模型

我有一个带照片的画廊,通过sidekiq处理照片。 当图库中有正在处理或排队的照片时,我想在页面中写一些内容。 一个选项是在将每张照片添加到队列时将其标记为processing ,并让sidekiq worker在完成后将其删除。 缺点是我需要检查是否至少有一张照片正在处理,这意味着检查所有照片…… 有没有办法直接查询sidekiq?

将文件传递给活动作业/后台作业

我通过标准文件输入在请求参数中收到一个文件 def create file = params[:file] upload = Upload.create(file: file, filename: “img.png”) end 但是,对于大型上传,我想在后台工作中执行此操作。 像Sidekiq或Resque这样的流行后台作业选项依赖于Redis来存储参数,所以我不能只通过redis传递文件对象。 我可以使用Tempfile ,但在某些平台上,例如Heroku,本地存储不可靠。 我有什么选择让它在“任何”平台上可靠?

测试Devise正在后台工作人员中重新发送确认指示电子邮件

如果他们在注册后的两天内没有确认,我想第二次向用户发送Devise确认说明,但是我似乎无法通过我的成功案例测试。 背景工作者(每天运行一次): class ResendConfirmationWorker include Sidekiq::Worker sidekiq_options queue: :resend_confirmation, retry: false def perform d = Time.zone.now – 2.days users = User.where.not(confirmation_sent_at: nil) .where(confirmed_at: nil) .where(created_at: d.beginning_of_day..d.end_of_day) users.find_each do |user| user.send_confirmation_instructions end end end RSpec测试: require ‘rails_helper’ describe ResendConfirmationWorker, type: :job do before do time = Time.zone.now – 2.days @user = create :unconfirmed_user, created_at: time, confirmation_sent_at: […]

在Sidekiq中使用多个Redis服务器

我正在使用Sidekiq将后台作业处理到我们的一个Rails项目中。 我们希望使用位于不同位置的不同Redis服务器来将ReportDB与其他后台处理作业ReportDB 。 根据Sidekiq配置维基我们可以配置像 配置/初始化/ sidekiq.rb Sidekiq.configure_server do |config| config.redis = { :url => ‘redis://redis.example.com:7372/12’, :namespace => ‘mynamespace’ } end Sidekiq.configure_client do |config| config.redis = { :url => ‘redis://redis.example.com:7372/12’, :namespace => ‘mynamespace’ } end 但是如何初始化与多个redis服务器的连接?

Rails 3 Sidekiq乘客

我能够让Sidekiq调度程序在本地工作。 我的最后一个障碍是如何将其部署到乘客的生产应用程序。 有人能指出我如何在乘客上持续运行Sidekiq的正确方向。 欣赏它。