Tag: sidekiq

在Ubuntu上运行Sidekiq作为守护进程

如何在Ubuntu上运行sidekiq作为守护进程? 如果我运行bundle exec sidekiq -D我得到invalid option: -D bundle exec sidekiq -D ,有没有办法在没有其他控制器的情况下运行它,比如上帝,新贵……?

优雅地关闭sidekiq进程

有谁知道如何找到sidekiq的pidfile优雅地关闭它? 运行ps ax | grep sidekiq ps ax | grep sidekiq然后运行sidekiqctl stop 一直给出一个no such pidfile错误? Cntl-C和Cntl-D似乎也没有效果。 关闭进程窗口并重新打开新窗口不会终止进程,因为它似乎作为守护程序运行。 我发现的唯一一致修复是重启。

使用carrierwave版本时堆栈级别太深

我正在尝试使用sidekiq worker ,它或多或少地将图像文件保存到数据库(使用carrierwave)。 保存的文件很少,这是从video文件中提取的关键帧。 这就是那个工人的意思。 我的图片上传器定义了几个版本,如下所示: class KeyframeUploader < CarrierWave::Uploader::Base # … # Keyframe thumbnail sizes version :small do process resize_to_fill: [180, 180], if: :square? process resize_to_fill: [320, 180], if: :not_square? end version :medium do process resize_to_fill: [460, 460], if: :square? process resize_to_fill: [640, 460], if: :not_square? end version :large do process resize_to_fill: [720, 720], […]

同时运行延迟作业和Sidekiq

我目前使用延迟作业来异步处理作业。 我没有使用.delay方法,而是使用.delay方法。 我想转移到Sidekiq,但我有太多类型的工作,并不能确保所有这些都是线程安全的。 所以我想并行运行Delayed Job和Sidekiq,并一次迁移一种类型的作业。 由于Delayed Job和Sidekiq都提供.delay方法,我如何区分这两者? 还有其他潜在问题吗?

适用于多种环境的Sidekiq配置

我已经查看了多个来源并尝试了各种方案,但无法解决这个问题。 请指出我正确的方向。 像每个人一样,我有3个环境(开发,分期和生产)。 我在sidekiq.yml文件中有以下内容 # Options here can still be overridden by cmd line args. # sidekiq -C config.yml — :verbose: false :namespace: xyz :logfile: log/sidekiq.log :concurrency: 25 :strict: false :pidfile: tmp/pids/sidekiq.pid :queues: – [stg_xyz_tests_queue, 10] – [stg_default_xyz_queue, 2] – [stg_xyz_default_queue, 3] development: :verbose: true :concurrency: 15 :queues: – [dev_xyz_queue, 10] – [dev_default_xyz_queue, 2] – […]

在multithreadingRails环境中使用Redis的最佳方法是什么? (Puma / Sidekiq)

我在我的应用程序中使用Redis,包括Sidekiq队列和模型缓存。 考虑到将从我的Web应用程序(通过Puma运行)和Sidekiq内部的后台作业调用将要访问Redis的模型,我的模型可以使用Redis连接的最佳方法是什么? 我目前在初始化器中执行此操作: Redis.current = Redis.new(host: ‘localhost’, port: 6379) 然后在整个代码中使用Redis.current.get / Redis.current.set (和类似的)… 据我所知,这应该是线程安全的,因为Redis客户端只使用Monitor一次运行一个命令。 现在,Sidekiq有自己的Redis连接池,并建议这样做 Sidekiq.redis do |conn| conn.get conn.set end 据我所知,这比仅使用Redis.current的方法更好,因为当他们命中Redis时,多个线程上没有多个工作线在一个连接上相互等待。 但是,如何才能将我从Sidekiq.redis获得的这种连接提供给我的模型? (无需在每个方法调用中将其作为参数传递) 我无法在该块中设置Redis.current,因为它是全局的,我回到每个人使用相同的连接(以及它们之间随机切换,甚至可能是非线程安全的) 我应该将从Sidekiq.Redis获得的连接存储到Thread-local变量中,并在任何地方使用该线程局部变量吗? 在那种情况下,我在“Puma”环境中做了什么? 如何设置线程局部变量? 对此有任何想法非常感谢。 谢谢!

从Rails 4应用程序调用大量SQL

我有一个Rails 4应用程序,我与sidekiq一起使用来运行异步作业。 我通常在我的Rails应用程序之外运行的一个作业是一大堆复杂的SQL查询,它们无法真正由ActiveRecord建模。 这组SQL查询与我的Rails应用程序的连接是,它应该在我的一个控制器操作被调用时执行。 理想情况下,我会从控制器中的Rails应用程序中为Sidekiq排队,继续运行查询。 现在它们存储在外部文件中,我不完全确定Rails运行所述SQL的最佳方法是什么。 任何解决方案都很受欢

Mailer无法访问用户模型中的reset_token

遇到@ user.reset_token返回nil的问题。 应用程序/视图/ user_mailer文件/ password_reset.html.erb Reset_token在User模型中声明,当我尝试使用sidekiq worker时会发生此问题。 请参阅下面的代码。 应用程序/模型/ user.rb class User < ActiveRecord::Base attr_accessor :reset_token def User.new_token SecureRandom.urlsafe_base64 end def send_password_reset_email PasswordResetWorker.perform_async(self.id) end private def create_reset_digest self.reset_token = User.new_token update_attribute(:reset_digest, User.digest(reset_token)) update_attribute(:reset_sent_at, Time.zone.now) end 应用程序/工人/ password_reset_worker.rb class PasswordResetWorker include Sidekiq::Worker sidekiq_options retry: false def perform(user_id) user = User.find(user_id) UserMailer.password_reset(user).deliver end end 应用程序/邮寄者/ user_mailer.rb class […]

Sidekiq:确保队列中的所有作业都是唯一的

我有一些更新触发器,将作业推送到Sidekiq队列。 因此,在某些情况下,可以有多个作业来处理同一个对象。 有几个独特的插件( “中间件” , 独特的工作 ),它们没有太多记录,但它们似乎更像是节流器,以防止重复处理 ; 我想要的是一个阻止重复创建相同工作的节流器。 这样,对象将始终以最新鲜的状态进行处理。 是否有插件或技术? 更新:我没有时间制作中间件,但我最终得到了一个相关的清理function,以确保队列是唯一的: https : //gist.github.com/mahemoff/bf419c568c525f0af903