草庐IT

ruby - perform_async 在 sidekiq 中不起作用

我正在尝试使用sidekiq在后台处理一些请求(它与padrino框架集成)。我的期望是,一旦调用了worker,请求处理程序会立即将答案返回给用户。为了确保它正常工作,我实现了一个worker,它会在完成处理之前打印一些消息并休眠大约44秒(以模拟后台的长时间处理)。令我惊讶的是,请求一直卡在工作人员完成工作之前。只有在那之后,请求处理程序才能向用户返回答案。起初我认为sleep函数可能是问题所在,所以我将sleep函数替换为忙碌的一段时间,但我有相同的行为:请求处理程序挂起,直到工作人员完成其任务。知道为什么会这样吗?您可以看到以下内容:请求处理程序:get:hardworker,

ruby-on-rails - Sidekiq 进程有一个单独的日志文件

目前我像这样运行sidekiqbundleexecsidekiq它将输出记录到log/sidekiq.log。但是我希望它运行的每个进程都有单独的文件。例如,如果第一个进程运行,则应创建sidekiq_1.log。 最佳答案 我假设您正在运行一个Rails项目。如果您使用新的ActiveJob框架(在Rails4.2中可用),您可以添加一个before_perform回调并更改记录器before执行作业。因此,每个作业都会记录到自己的文件中。例子:classMyJob如果你想为几个作业记录到不同的文件,你可以创建一个基类并从那里继承

ruby-on-rails - 如何将 current_user 传递给 Sidekiq 的 Worker

我正在尝试将current_user或User.find(1)传递给工作模块,但在sidekiq的仪表板中出现错误(localhost:3000/sidekiq/retries):NoMethodError:undefinedmethod`supports'for"#":String注意:我的关系还好,即:u=User.find(1)u.supports#=>[]supports_controller.rb:defcreate@user=current_userProjectsWorker.perform_async(@user)...endapp/workers/projects_w

ruby-on-rails - 从 perform 中重新安排 sidekiq 作业

有没有办法在Sidekiqworker中检查perform中的条件,并在不同的时间重新安排作业(并停止执行作业)?defperformifis_it_summer_yet?Bear.wake_em_upelse#rescheduletoperforminafewhoursendend这是一个简单的例子,但在我的用例中有很多针对该条件的计算和网络调用,所以我无法在外部完成 最佳答案 defperformifis_it_summer_yet?Bear.wake_em_upelseself.class.perform_in(1.hour)

ruby - 有什么方法可以狙击或终止特定的 sidekiq 工作人员?

是否有可能狙击或取消特定的Sidekiq工作人员/正在运行的作业-有效地调用异常或某些东西进入工作线程以终止它。我在Sidekiq(最新)下有一些相当简单的后台ruby​​(MRI1.9.3)作业,它们运行良好并且依赖于外部系统。外部系统可能需要不同的时间,在此期间工作人员必须保持可用。我想我可以使用Sidekiq的API找到合适的工作人员——但我在文档中没有看到任何“终止/取消/退出/退出”方法——这可能吗?这是其他人做过的事吗?附言。我知道我可以在worker作业中使用异步循环来捕获相关信号并自行关闭......但由于外部系统的性质,这会使事情变得有点复杂。

ruby-on-rails - 使用 Sidekiq 和模块命名模式时的循环依赖问题

早上好,我们在使用Sidekiq处理队列时遇到了恼人的问题。这个问题似乎是我们第一次在生产环境中执行Sidekiq(急切加载资源)时发生的。基本上,我们将我们的类分隔在模块中以获得更好的命名模式。这是出现问题时的示例模块moduleMyAppmoduleAPIIntegrationclassClientdefdriver@driver||=MyApp::APIIntegration::Driver.newendendendend我们收到“在自动加载常量MyApp::APIIntegration::Driver时检测到循环依赖”知道为什么会这样吗?我们应该通过调用Driver而不是完全限

ruby-on-rails - 当插入序列化字段时,sidekiq 的奇怪行为在邮件程序上返回了 jid

当我试图将worker返回的jid推送到模型上的序列化字段时,我遇到了一些奇怪的行为。最好用这段代码解释:classFoo预期的日志记录:shasbeenpushed["s"]["s"]normalworkerhasbeenpushed["s","6d25faf98b6448a43e1d3bb5"]["s","7144ceab11ece07ae352ffb9"]mailerworkeridpushed["s","6d25faf98b6448a43e1d3bb5","54c4634bfc11ec1adad926da"]["s","7144ceab11ece07ae352ffb9","3d

ruby-on-rails - Sidekiq 应该如何在作业完成时在网页上通知用户?

用户可以通过由Controller操作处理的Web界面在我的系统中上传多个文件。defimportpaths=params[:files].map(&:path)ifparams[:files].present?ifpaths@results=MyRecord.create_frompathsendredirect_toconfirmation_my_records_pathendclassMyRecord由于sidekiq作业将在后台运行,我如何通过确认页面通知用户作业已完成?我们不知道作业何时完成,因此Rails请求和响应周期无法确定加载确认页面时的任何内容。确认页面是否应该只显示

ruby-on-rails - 如何让Sidekiq worker不加载Rails环境

我的Rails应用启动了一个只发送文本消息的Sidekiqworker。我确信它不需要整个Railsenv就可以工作(它只需要客户的电话和文本作为参数发送)。但目前工作人员加载它并因此从我的微型DigitalOcean液滴中获取大量内存(就像单独的Rails应用程序一样)。有什么方法可以告诉工作人员它应该需要的唯一文件的路径吗? 最佳答案 您可以将您的sidekiqworker完全解耦为独立的(一个或两个文件)并将其作为单独的进程在您的digitalocean实例上运行。然后在您的Rails应用程序中,当您准备好完成工作时,您只需将

ruby - sidekiq 应用程序中的 postgres 编码错误

我正在开发一个应用程序,其中ruby​​sidekiq进程调用第3方并将数据解析到数据库中。我正在使用sequeladmyorm。我在结果中得到了一些奇怪的字符,例如:"TweetsenIngl\xE9syenEspa\xF1ol"当尝试将其保存到postgres时,会发生以下错误:Sequel::DatabaseError:PG::CharacterNotInRepertoire:ERROR:invalidbytesequenceforencoding"UTF8":0xe90x730x20奇怪的是字符串认为它是UTF-8,如果我检查编码名称,它说:name.encoding.name