草庐IT

ruby-on-rails - 如何防止许多 sidekiq 作业超过 API 调用限制

我正在开发一个RubyOnRails应用程序。我们有许多sidekiqworker可以同时处理多个作业。每个作业都会调用ShopifyAPI,Shopify设置的调用限制是每秒2次调用。我想同步它,以便在给定的一秒钟内只有两个作业可以调用API。我现在这样做的方式是这样的:#frozen_string_literal:trueclassSynchronizerattr_reader:shop_id,:queue_name,:limit,:wait_timedefinitialize(shop_id:,queue_name:,limit:nil,wait_time:1)@shop_id=

redis - 在 sidekiq 中检索队列位置

我浏览了文档,但还没有找到任何东西。是否有可能检索给定作业在Sidekiq队列中的当前位置?我的用例是2名工作人员在默认队列上处理数百个复杂度可变的任务。因此,如果我现在提交一个新任务并且队列大小为10,我如何在5分钟后确定我的任务的位置?谢谢。 最佳答案 如果不对整个队列进行线性扫描,就不行;随着作业的获取和执行,该位置将逐毫秒变化。Sidekiq::Queue.new("default").eachdo|job|pjobend 关于redis-在sidekiq中检索队列位置,我们在S

ruby-on-rails - 使用 Redis 计算特定的预定 Sidekiq 作业

有没有办法使用Redis检索以下作业数?Sidekiq::ScheduledSet.new.inject(0)do|memo,job|memo+=1ifjob.at即计划的作业应该已经运行,但没有运行。这适用于较小的队列大小,但对于较大的队列(60k计划作业需要30秒以上)的扩展性很差。谢谢! 最佳答案 "ZRANGEBYSCOREschedule'-inf'#{Time.now.to_f}"https://redis.io/commands/zrangebyscore 关于ruby-o

ruby-on-rails - Redis::InheritedError 调用 Sidekiq worker 时

每当我调用Sidekiqworker时,我都会收到以下错误:Redis::InheritedError(Triedtouseaconnectionfromachildprocesswithoutreconnecting.YouneedtoreconnecttoRedisafterforking.)我在Heroku上托管并使用通过connection_poolgem连接到的RedisCloud。这是redis.rb:ifRails.configuration.redis_uri.present?$redis=ConnectionPool.new(:size=>8,:timeout=>30

redis - 我可以使用 sidekiq/redis 在 worker 的 perform 方法中获取当前队列吗?

我希望能够删除队列中的所有作业,但我不知道它是什么队列。我在我的工作人员的执行方法中,我需要获取“当前队列”,即当前作业来自的队列。这次我使用:require'sidekiq/api'queue=Sidekiq::Queue.newqueue.eachdo|job|job.deleteend因为我只是使用“默认队列”,所以它可以工作。但现在我会使用很多队列,我不能只为这个工作人员指定一个队列,因为我需要使用很多队列来实现服务器负载平衡。那么我如何才能在perform方法中获取我们所在的队列?谢谢。 最佳答案 你不能设计,这是工作的正

ruby-on-rails-4 - Sidekiq 独特的作业处理

我需要确保25个工作人员中的任何一个同时处理每个user_id的工作不超过一个,以避免死锁。我已经尝试过sidekiq独特的作业,但死锁不断发生,因为它一直在尝试处理队列中所有待处理的作业,而不是在参数中查找user_id。谢谢classMyWorkincludeSidekiq::Workersidekiq_options:queue=>"critical",unique:true,unique_args:->(args){[args.user_id]}defperform(work_params) 最佳答案 sidekiq_opt

ruby-on-rails - Sidekiq 不发送电子邮件

我正在使用sidekiq在后台发送邮件。我在sidekiq日志中得到了这个defperformed?create_activation_digest&&customer.save&&send_mail(:account_activation,{email:customer.email,activation_token:customer.activation_token})#fromheremailermethodisbeingcalledendclassApplicationMailer>[ActiveJob][ActionMailer::DeliveryJob][2797cd49-d

ruby-on-rails - rails/Sidekiq : Help me understand the duplication in this example of `initializers/sidekiq.rb`

我第一次在Rails应用程序中使用Sidekiq。这也是我第一次使用Redis。我见过几个示例(Here、here、here),其中initializers/sidekiq.rb包含以下几行:Sidekiq.configure_serverdo|config|config.redis={url:'redis://localhost:6379/0',namespace:"sidekiq_app_name_#{Rails.env}"}endSidekiq.configure_clientdo|config|config.redis={url:'redis://localhost:6379/

ruby-on-rails - Rails 5.2 和 Sidekiq : Can't find Worker Class

我有一个名为release_monitor_worker.rb的工作程序保存在app/workers/下。看起来像这样:classReleaseMonitorAddWorkerincludeSidekiq::Workersidekiq_optionsretry:falserequire'watir'require'nokogiri'require'open-uri'defparse_url(url)puts"Beginningnavigationto#{url}"browser=Watir::Browser.new:chrome,headless:truebrowser.gotourl

ruby-on-rails - Sidekiq——Email.delay.sendMail

所以,我有这段代码classInvoiceNotifier运行命令(从控制台)InvoiceNotifier.sendMail('my@email.com')尽管如此InvoiceNotifier.delay.sendMail('my@email.com')不起作用,它返回一个字符串。我该如何调试它?我查看了Redis,它有3个键,但它们似乎都没有任何值。帮忙吗? 最佳答案 perform方法不是必需的。问题是我没有做bundleexecsidekiq从命令行到实际有一个交互界面..http://railscasts.com/epi