Tag: 延迟工作

带有delayed_job的noMethodError(collectiveidea gem)

更新:这个问题有一个补丁: https : //github.com/collectiveidea/delayed_job/commit/023444424166ba2ce011bfe2d47954e79edf6798 更新2:对于在Heroku专门遇到此问题的任何人,我发现降级为Rake 0.8.7并使用延迟作业版本2.1.4工作,而延迟作业v3没有(虽然补丁它确实在本地工作) 。 这是在Bamboo-mri-1.9.2堆栈上。 我试图在本地的rails 3.1.0应用程序上实现delayed_job。 我运行了迁移并安装了gem文件: gem ‘delayed_job’ gem ‘delayed_job_active_record’ 关于collectiveidea github的文档( https://github.com/collectiveidea/delayed_job )。 我正在从我的控制器拨打延迟电话,如下所示: EventMailer.delay.event_message_email(current_user, @event_message) 这会导致将任务添加到作业表中,但是当我运行rake作业时:工作它会记录以下错误: Class#event_message_email failed with NoMethodError: undefined method `event_message_email’ for Class:Class – 6 failed attempts 我已经查看了SO上的其他delayed_job NoMethod错误问题,但没有解决此特定错误或提供解决方案。 collectiveidea页面提到没有传递方法调用的这种格式是如何设置Rails 3邮件的黑客,所以我想知道这个文档是否可能有些过时,如果有一种新的方法来调用邮件程序方法? 更新:也毫不拖延地调用邮件程序方法工作正常,我在默认的rails服务器上运行它,因此在collectiveidea faq中提到的Thin问题不适用。 谢谢

未初始化的常数延迟::作业

我已将delayed_job gem添加到我的gemfile并正确安装但是当我尝试运行以下行时: Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 我收到错误’uninitialized constant Delayed :: Job’ 有人可以解释我在这里需要做什么吗? 我已经尝试过预先运行’rake jobs:work’,但它也会返回’未初始化的常量Delayed :: Job’错误。 另外,我已经在文件(application.rb)中添加了“require’dundate_job’”而没有太多运气。

Delayed_job(2.1.4)错误:作业无法加载:需要IO实例。 处理者无

我创建了一个简单的成就系统,并想引入delayed_job(2.1.4)来处理。 但是,delayed_jobs表中的处理程序列始终为nil,这会导致last_error文本: Job failed to load: instance of IO needed. Handler nil Job failed to load: instance of IO needed. Handler nil 这是我的设置: 成就观察员 class AchievementObserver < ActiveRecord::Observer observe User, Comment, … def after_create(record) # initiate delayed job to check conditions Delayed::Job.enqueue(TrophyJob.new(record.id, record.class.name)) end … end 奖杯工作 class TrophyJob < Struct.new(:record_id, :record_type) def perform case […]

Rails:延迟作业 – >发送异步邮件时不从“字段”中取出

我正在运行2.1.1,Rails 3,并且有一个heckuva时间让delayed_job gem工作。 如果我在邮件程序上删除handle_asynchronously,一切正常……但如果我把它重新插入,我得到: nil的未定义方法`name’:NilClass(其中’name’来自@ contact.name …当handle_asynchronously被禁用时,它工作正常)。 如果我删除所有@contact模板信息,我得到: “发送邮件所需的发件人(Return-Path,Sender或From)”? 这是我做错了什么或某种错误吗? 下面的相关代码(my@email.here替换为合法的电子邮件地址) class ContactMailer “my@email.here” def contact_mail(contact) @contact = contact mail(:to => ENV[‘MANAGER_EMAIL’], :subject => ‘Delayed Job Test’, :from => ‘my@email.here’, :content_type => ‘text/plain’) end handle_asynchronously :contact_mail, :run_at => Proc.new { 2.seconds.from_now } end 任何建议非常感谢。

在用户等待时处理大量数据的最佳实践(在Rails中)?

我有一个bookmarklet,当使用时,将当前浏览器页面上的所有URL提交给Rails 3应用程序进行处理。 在幕后我使用Typhoeus来检查每个URL是否返回2XX状态代码。 目前,我通过对Rails服务器的AJAX请求启动此过程,并在处理并等待结果时等待。 对于一个小集合,这非常快,但是当URL的数量非常大时,用户可以等待,例如10-15秒。 我已经考虑过使用延迟作业来处理用户线程之外的内容,但这似乎不是正确的用例。 由于用户需要等到处理完成才能看到结果,并且延迟作业可能需要在作业开始之前最多五秒钟,我无法保证处理将尽快发生。 不幸的是,在这种情况下这个等待时间是不可接受的。 理想情况下,我认为应该发生的是: 用户点击bookmarklet 数据被发送到服务器进行处理 在旋转线程进行处理时,会立即返回等待页面 等待页面定期通过ajax轮询处理结果并更新等待页面(例如:“处理的567个URL中的4个…”) 一旦准备就绪,等待页面将更新结果 一些额外的细节: 我正在使用Heroku(长时间运行的进程在30秒后被杀死) 登录和匿名用户都可以使用此function 这是一种典型的方法,还是有更好的方法? 我是否应该在处理过程中滚动自己的更新数据库的线程外处理,或者是否可以使用延迟作业(可以在Heroku上使用)? 任何推动正确的方向将非常感激。

在Procfile中启动多个worker(开发环境vs Heroku)

我有一个简单的Procfile,内容如下: web: bundle exec rails server thin -p $PORT worker: bundle exec rake jobs:work 在Heroku上,这将启动N个工作任务,其中N是我将其缩放的任何东西。 在我的开发系统上, $ foreman start 只会启动一个工作任务。 如果我想启动三个worker,我需要一个看起来像这样的Procfile: web: bundle exec rails server thin -p $PORT worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work 这是一个有点迂腐的问题,但如果我希望我的开发环境像我的Heroku环境一样,那么启动N个工作任务的最佳方法是什么? 是批准的方法来创建(例如)Procfile_local并通过foreman -f Procfile_local使用它?

使用monit监控多个延迟的工作人员

我已经阅读了很多关于使用monit监视delayed_job的内容。 实施非常简单直接。 但是当一个工人不够时,我该如何设置monit来确保10个工人不断运行呢?

如何将工作人员分成延迟工作+ heroku的工作池?

我的环境是rails 3.1,heroku bamboo stack,delayed_job_active_record,(https://github.com/collectiveidea/delayed_job)并尝试使用hirefire。 (https://github.com/meskyanichi/hirefire) – 我可以看到delayed_job队列文档,但是如何在heroku上应用它? 我有一组最高优先级的任务,每小时就会产生一次,我需要投入3名工作人员,大约需要26分钟才能完成。 在此期间,不太重要的后台任务需要继续,可能有1名工作人员专门为他们服务。 因此,我将优先级任务块设置为命名队列,例如’hourtask’,然后为其他所有内容命名一个队列’everythingelse’:) 问题是,我如何将heroku工作者专门用于特定队列? 根据文档,它与环境变量有关吗? 它说: # Set the –queue or –queues option to work from a particular queue. $ RAILS_ENV=production script/delayed_job –queue=tracking start $ RAILS_ENV=production script/delayed_job –queues=mailers,tasks start 但是我对heroku设置不熟悉,想知道如何将它应用到我的heroku生产环境中?

延迟工作不会开始使用Capistrano

我无法使用capistrano配方启动延迟的工作流程。 这是我得到的错误。 /usr/local/lib/ruby/gems/1.9.1/gems/delayed_job-2.1.1/lib/delayed/command.rb:62:in `mkdir’: File exists – /my_app/server/releases/20101120001612/tmp/pids (Errno::EEXIST) 这是capistrano代码(注意:我已经尝试了两个启动/重启命令) after “deploy:restart”, “delayed_job:start” task :start, :roles => :app do run “cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job -n 2 start” end 部署日志中的更多细节错误 – executing command [err :: my_server] /usr/local/lib/ruby/gems/1.9.1/gems/delayed_job-2.1.1/lib/delayed/command.rb:62:in `mkdir’: File exists – /my_app/server/releases/20101120001612/tmp/pids (Errno::EEXIST) [err :: my_server] from /usr/local/lib/ruby/gems/1.9.1/gems/delayed_job-2.1.1/lib/delayed/command.rb:62:in `daemonize’ [err :: my_server] from script/delayed_job:5:in `’ command […]

在不重新设置排队系统的情况下实施摘要电子邮件的最优雅方式是什么?

我有交易电子邮件系统设置,默认情况下,人们会在事件发生时收到电子邮件: class Comment after_create :email_original_poster def email_original_poster UserMailer.delay.notify_author_of_comment self end end 然而,不是收到电子邮件,我的一大部分用户更喜欢每日或每周摘要。 实现这一目标最干净最优雅的方法是什么? 我已经运行了delayed_job ,但这并不像是一个delayed_job工作,因为我正在排队需要执行操作的数据而不是需要执行的操作。 …没有重新发明排队系统 我知道明显的解决方案是queued_emails表,当然我可以这样做。 我问这个问题的原因是这样做是重新发明一个排队系统。 不仅有很多排队系统,但正如Percona这篇措辞好的post所指出的那样,最好不要自己动手: http://www.engineyard.com/blog/2011/5-subtle-ways-youre-using-mysql-as-a-queue-and-why-itll-bite-you/ 你有没有实现摘要邮件,你使用了delayed_job吗?你学到了什么?