Tag: 延迟工作

使用rSpec测试delayed_job链的最佳方法是什么?

目前我的代码中有一个延迟方法,如下所示: CommentMailer.delay.deliver_comments(@comment, true) 我在我的规范中写了这样的东西: dj = mock(“DelayProxy”) CommentMailer.should_receive(:delay).and_return(dj) dj.should_receive(:deliver_comments).with(comment, true) 是否有更好的方法来处理这种和/或链式方法,例如rSpec中的方法?

仅在特定服务器上调用delayed_job capistrano任务

我有一个用于delayed_job任务的专用服务器。 我想只在这台服务器上启动,停止和重启delayed_job worker。 我正在使用delayed_job提供的capistrano食谱。 当我只有1台服务器时,这是我的配置: before “deploy:restart”, “delayed_job:stop” after “deploy:restart”, “delayed_job:start” after “deploy:stop”, “delayed_job:stop” after “deploy:start”, “delayed_job:start” 现在我想让这些钩子只适用于一个单独的delayed_job服务器( role :delayed_job )。 这可能优雅吗? 我是否必须在meta任务中包装每个delayed_job任务? 或者写我自己的任务而不是使用延迟工作提供的任务?

在所有已成功的工作成功回调之前挂钩以保存成功完成的工作

目的: 保存已成功完成的作业 使用的方法 看了这个答案 ,它告诉我们如何保存已完成的作业, 这个答案建议创建一个插件,该插件将在一个生命周期事件之后执行。 问题 以下生命周期事件和代码中存在的适用参数: :enqueue => [:job], :execute => [:worker], :loop => [:worker], :perform => [:worker, :job], :error => [:worker, :job], :failure => [:worker, :job], :invoke_job => [:job] 我曾预料会有一些事件对应成功,我不会在工作成功后得到哪一个。 一些代码 在上述两个答案的帮助下,我创建了这个插件来保存已完成的作业并输入config / initializers / save_completed_delayed_job.rb module Delayed module Plugins class SaveCompletedDelayedJobPlugin < Plugin callbacks do |lifecycle| # see below for list […]

知道resque工人何时完成了工作

我正在与Resque-worker(5名工人)一起工作。 现在,当这个工作完成/完成时,我想触发另一个工作人员来处理存储在db中的前一个工作人员的数据。 这样做最合适的方法是什么?

延迟作业佣金任务失败

我正试图让工作延迟工作作为佣金任务,但对于我的生活,我无法弄清楚我做错了什么。 鉴于以下设置: #config/environment.rb Rails::Initializer.run do |config| config.gem ‘delayed_job’ end #Rakefile begin require ‘delayed/tasks’ rescue LoadError STDERR.puts “Run `rake gems:install` to install delayed_job” end #Observer class SomeObserver < ActiveRecord::Observer def foo(bar) end handle_asynchronously :foo end 每当我运行rake作业时:清除我收到以下错误: undefined method `handle_asynchronously’ for SomeObserver:Class 即使我在运行测试用例或直接测试用例时没有收到此错误。 有任何想法吗?

Delayed_job:作业无法加载:未初始化的常量Syck :: Syck

这是错误: >> Delayed::Job.find(:last).last_error => {Job failed to load: uninitialized constant Syck::Syck. Handler: \”— !ruby/struct:Delayed::PerformableMethod \\nobject: &id007 !ruby/object:TryController \\n _action_name: create 但我安装了syck ext。 用法: def create_user(name,pass,time) puts “hello” Net::HTTP.get(URI.parse(“http://www.example.net/buildtest.php?hao=#{name}&mi=#{pass}&da=#{time}”)) end def create delay.create_user(“nihao000oei9″,”1″,”1”) end gem’delayed_job’,’2.1.4′ ruby 1.9.2p0(2010-08-18修订版29036)[x86_64-darwin10.4.0] Rails 3.0.1 谢谢。

通过在应用程序启动时启动worker来初始化Delayed Jobs gem

我正在使用Ruby on Rails 3.0.9,我正在尝试设置delay_job gem。 如果在重新启动Apache2服务器后,我按照以下命令在Terminal \ Console中运行,则一切正常: RAILS_ENV=development script/delayed_job stop RAILS_ENV=development script/delayed_job -n 2 start 但是,因为我总是希望在应用程序启动时启动worker,在我的config/initializers/delayed_job.rb添加以下代码(处理开发和生产模式): if Rails.env.development? system ‘RAILS_ENV=development script/delayed_job stop’ system ‘RAILS_ENV=development script/delayed_job -n 2 start’ elsif Rails.env.production? system ‘RAILS_ENV=production script/delayed_job stop’ system ‘RAILS_ENV=production script/delayed_job -n 2 start’ end 但是,通过使用上面的代码并在重新启动Apache2服务器后,DJ gem不再按预期工作。 也就是说,当我在Terminal \ Console中运行上述命令行时,它不会处理作业。 如何让DJ正常工作? 问题是什么? PS:我想这样做是为了使流程自动化。 它认为config/initializers/delayed_job.rb文件中的上述代码没有“创建” RAILS_ROOT/tmp/pids目录中与DJ相关的“pids”文件。 这些只能通过手动运行上述命令行来创建。 为什么会这样? @Devin […]

Ruby on Rails延迟工作本地不会运行

我正在处理活动记录gem的延迟工作https://github.com/collectiveidea/delayed_job我正在尝试设置一个工作,在我的应用程序中发生事件后运行五分钟。 五分钟过后,我需要进行一些数据库更新。 我尝试过rake jobs:work和RAILS_ENV =开发脚本/ delayed_job启动。 在此之前,我已经运行了bundle install,rails generate delayed_job:active_record和rake db:migrate。 我有一个彩票网站,需要每五分钟检查一次获胜者,并为获胜的玩家更新令牌。 我等了五分钟,但我的本地应用程序没有更新。 这是我到目前为止所拥有的: gem文件: gem ‘delayed_job_active_record’ gem “daemons” 工作(位于lib) class WinnersJob < Struct.new(:blast_id) def perform … end 调节器 require ‘winners’ Delayed::Job.enqueue(WinnersJob.new(blast.id), 1, 5.minutes.from_now) end

同时运行延迟作业和Sidekiq

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

日志在延迟作业的生产中不起作用

我遇到了一些奇怪的问题,我的delayed_jobs在生产中失败了。 最后,我把它缩小到记录器。 如果我注释掉我的日志函数调用,一切正常。 但是,如果我尝试登录,我会在delayed_job处理程序中得到这个: — !ruby/struct:Delayed::PerformableMethod object: AR:User:1 method: :load_and_update_without_send_later args: [] | closed stream /opt/ruby/lib/ruby/1.8/logger.rb:504:in `write’ /opt/ruby/lib/ruby/1.8/logger.rb:504:in `write’ /opt/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize’ /opt/ruby/lib/ruby/1.8/logger.rb:496:in `write’ /opt/ruby/lib/ruby/1.8/logger.rb:326:in `add’ /opt/ruby/lib/ruby/1.8/logger.rb:374:in `info’ /home/rails/myapp.com/releases/20100203203031/app/models/gmail.rb:35:in `log’ 我的记录器看起来像这样: @@error_log_file = File.open(“#{RAILS_ROOT}/log/error.log”, ‘a’) @@error_log_file.sync = true def log(msg) msg.each do |line| line = “#{Time.now.strftime(‘%H:%M:%S’)} #{line}” @@error_log_file.info(line) # this is line 35 where it’s failing […]