Tag: sidekiq

Sidekiq Rails 4.2使用活动作业还是工作者? 有什么不同

这是我第一次异步处理作业我正在我的应用程序中实现Sidekiq进行后台处理。 我会用它来提醒电子邮件和应用内通知。 我很困惑我是否应该使用Active Job创建一个发送电子邮件或Sidekiq Worker来发送电子邮件的工作。 他们似乎做同样的事情,Rails 4.2 Active Job似乎很新……它是否取代了对Sidekiq工作者的需求? 以下是使用Active Job作业和Sidekiq Worker发送邮件代码的相同内容。 我正在使用Whenever gem进行调度。 my_mailers.rb class MyMailers < ActionMailer::Base def some_mailer(r.user_id) @user = User.find(r.user_id) mailer_name = "ROUNDUP" @email = @user.email @subject ="subject text" mail(to: @email, subject: @subject, template_path: '/notifer_mailers', template_name: 'hourly_roundup.html', ) end end 使用Sidekiq“工人” some_worker.rb class SomeWorker include Sidekiq::Worker def perform() @user = User.all […]

Sidekiq错误:无法连接到服务器:没有这样的文件或目录

我遇到了我的sidekiq,heroku,redistogo,rails 4配置问题。 我在heroku上有1个dyno和1个worker。 我只是使用worker来获取外部api的请求。 这是我在Heroku日志中得到的错误: app[worker.1]: could not connect to server: No such file or directory app[worker.1]: connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”? app[worker.1]: Is the server running locally and accepting 这是我的config/initializers/sidekiq.rb if Rails.env.production? Sidekiq.configure_client do |config| config.redis = { url: ENV[‘REDISTOGO_URL’] } end Sidekiq.configure_server do |config| config.redis = { url: ENV[‘REDISTOGO_URL’] } Rails.application.config.after_initialize do […]

Sidekiq在完成后安排同一个工作人员排队

我使用Sidekiq和Rails 3,使用以下工人类: class BotWorker include Sidekiq::Worker def perform(user_id) user = User.find(user_id) puts user.email if condition # always true for now BotWorker.perform_in(1.hour, user_id) # not working end end end 我的控制器只是 BotWorker.perform_async(user_id) 但是,在Sidekiq仪表板上,似乎并没有安排另一名工人。 还要注意,重复是有条件的,因此我似乎不能使用sidetiq或一些sidekiq调度扩展。 Sidekiq还是新手,请阅读文档。 我错过了什么?

Rails:取消Sidekiq的预定作业

所以我的模型中有一个Sidekiq工作者,看起来像这样: class Perk < ActiveRecord::Base include Sidekiq::Worker include Sidekiq::Status::Worker after_save :update_release_time def update_release_time if self.release_time_changed? #if scheduled job already exists then cancel and reschedule # Sidekiq::Status.cancel scheduled_job_id # scheduled_job_id = NotifierWorker.perform_at(time.seconds.from_now, …..) #elsif scheduled job doesn't exist, then schedule for the first time # scheduled_job_id = NotifierWorker.perform_at(time.seconds.from_now, …..) #end end end end 所以基本上,我的代码检查发布时间是否已经改变。 如果有,则必须取消先前安排的作业并在新的时间安排它。 我如何实现这一点,即取代我的伪代码会是什么? […]

Redis引发错误:NOAUTH需要身份validation,但没有密码设置

当我通过命令连接到Redis服务器时,我收到错误NOAUTH身份validation : redis-cli并运行ping以检查Redis是否正常工作。 我找到NOAUTH身份validation所需的错误答案 ,该错误描述了此错误仅在Redis设置密码时发生,但我在etc/redis/redis.conf检查了Redis配置文件,并且没有密码设置。 有没有人知道,如果有其他设置可以导致此错误? 谢谢你的帮助。 p / s:我使用的是Ruby on Rails Web框架,Redis数据库用于Sidekiq。 编辑:Redis版本是2.8.4。 服务器托管在AWS上。 目前,我决定为Redis服务器设置一个密码,以便在运行时无法设置密码。 (重启Redis服务器时,它将正常工作。您可以运行sudo service redis-server restart来重启Redis服务器。)

Redis pub / sub on rails

关注Redis Pub / Sub 这工作正常,我可以使用任何类发布消息 $redis.publish ‘channel’, { object: @object.id } 使用redis-cli > MONITOR ,我可以validation此请求是否已正确发布 [0 127.0.0.1:64192] “publish” “channel” “{:object=>\”5331d541f4eec77185000003\” }” 当我在其他类(监听器类)中向该通道添加订户块时,问题就开始了,如下所示 class OtherClass $redis.subscribe(‘channel’) do |payload| p payload end end 在redis-cli > MONITOR ,还显示侦听器已正确订阅 [0 127.0.0.1:52930] “subscribe” “channel” 问题是,当我将订阅者监听器类添加到相同的rails应用程序时……它停止工作,因为OtherClass监听redis服务器并停止执行任何其他代码……它只是坐在那里听。 那么有没有办法在相同的rails应用程序上使用redis创建消息传递总线…以便从某些类或服务对象发布事件,并且有特定通道的侦听器在后台接收事件时采取行动。 我知道我可能会使用sidekiq或任何其他背景工作者来完成这项工作……但过了一段时间后,后台工作人员变得混乱而且无法维护。

Sidekiq部署到多个环境

(请参阅下面的详细配置,这是Henley Chiu回答的结果)。 我一直试图将我的大脑包裹在Sidekiq部署,我并没有真正得到它。 我在同一台服务器上有一个带有暂存环境和生产环境的应用程序。 我所看到的关于sidekiq部署的所有内容基本上都说“只需将sidekiq / capistrano添加到您的部署文件中”,所以我就这样做了。 然后说明是“这里是带有选项的yml文件”,但似乎没有解释。 我需要命名空间吗? 我在初始化文件中看到,但这似乎是指向服务器外部。 我之前部署过,每个阶段似乎都在适当的环境下启动sidekiq,但它们都从相同的队列进行处理。 我的生产电子邮件试图由舞台sidekiq处理,但失败了。 我暂时停止了我的舞台,但最终我还需要再次使用它。 我希望自己不会变得密集,我真的试图理解这一点,并且我很难找到一个明确的“这就是它的完成方式”。 对于它的价值,这里是config / sidekiq.yml(在部署期间加载正常): :concurrency: 5 :verbose: false :pidfile: ./tmp/pids/sidekiq.pid :logfile: ./log/sidekiq.log :queues: – [carrierwave, 7] – [client_emails, 5] – [default, 3] staging: :concurrency: 10 production: :concurrency: 25 日志文件和pid似乎在正确的位置,但队列只是合并。 任何帮助都会很棒! 此外,如果重要: Rails 3.2.11, passenger, nginx, rvm, Ubuntu 12.10, and Ruby 1.9.3 详细配置(答案): […]

失败,错误10068:“运算符无效:$ oid”

刚更新到最新版本的mongoid(3.1.0)和sidekiq(2.7.2) 现在我收到错误: failed with error 10068: “invalid operator: $oid” 从查看代码我看到一个像这样的选择: @selector={“_id”=>{“$oid”=>”[some id]”}} 什么可以在这里出错?

使用Rspec测试Sidekiq工作人员

我如何测试以下代码行使用rspec在5分钟内调用’perform’? CustomSidekiqWorker.perform_in(5.minutes, parameter1)

使用sidekiq时Rails动作邮件程序中的动态域名

在我的要求中,单个项目有不同的域名。我想发送重置密码链接与用户请求重置密码的域名。为此我在application_controller.rb中完成了以下操作并且它运行良好。 before_filter :set_mailer_host def set_mailer_host ActionMailer::Base.default_url_options[:host] = request.host_with_port $url_host = request.host_with_port end 后来,我使用了sidekiq作为延迟邮件程序,并在整个应用程序中更新如下 Notifier.delay.password_reset(user.id) 由于邮件程序配置了sidekiq,它使用的是仅在配置中提供的默认域名,并且它没有使用application_controller.rb上的请求提供的动态域名 任何关于在sidekiq运行的邮件程序上获取动态域的建议都将非常感激。 Rails – 3.2.8 Ruby – 1.9.3 sidekiq – 2.13.1 谢谢!!!