рд░реЗрд▓ рдореЗрдВ рд░реЗрд╕рдХреНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

Resque - рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдмреА-рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдирд╛ рдФрд░ рдЙрдирдХреЗ рдмрд╛рдж рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрдиред рдХрд╛рд░реНрдп рдХрд┐рд╕реА рднреА рд░реВрдмреА рд╡рд░реНрдЧ рдпрд╛ рдореЙрдбреНрдпреВрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИред рдорд╛рдгрд┐рдХ рд╕рдореБрджрд╛рдп рдореЗрдВ, рд░реЗрд╕рдХреНрдпреВ рдиреЗ рдбрд┐рд▓реЗрдпрдб рдЬреЙрдм рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ (рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡реИрд╕реЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреНрдпреЛрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рдпрд╣ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрд╛рдд рдереА) рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдпрджреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╢реАрдиреЛрдВ рдкрд░ рдХрд╛рд░реНрдп рд╡рд┐рднрд╛рдЬрди, рдХрд╛рд░реНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рддрд┐рд░реЛрдзред рд╕реНрдореГрддрд┐ рд▓реАрдХ рдФрд░ рдЕрдзрд┐рдХ, рдФрд░ рдЕрдзрд┐рдХ, рдФрд░ рдЕрдзрд┐рдХред рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрдп рд╣реИ рдЬреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ README рд╕реЗ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдпрд╣ рд▓реЗрдЦ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рд░реЗрд▓ рдФрд░ рд░реЗрд╕рдХреНрдпреВ-рд╢реЗрдбреНрдпреВрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реЗрд▓ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд░реЗрдХ рдХреЛ рд░реЗрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ


Resque рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Redis, рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП - рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд░реЛрдд рдФрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рдВрдбреЛрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдЦреБрдж рдХреЛ рдЪреБрдирд╛ рд╣реИ рдХрд┐ рдорд╕реЛрдЪрд┐рд╕реНрдЯреНрд╕ рдХреЛ рднреА рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк Resque рдХреЛ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Redis рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЬреАрдереВрдм рдкреЗрдЬ рдкрд░ рдЕрдзрд┐рдХ ред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рдм рдПрдХ рд╕рд░рд▓ рд░реЗрдбрд┐рд╕-рд╕рд░реНрд╡рд░ рдХрдорд╛рдВрдб рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рдЬреЗрдордлрд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

gem 'resque' gem 'resue-scheduler' 


рдлрд┐рд░ рдмрдВрдбрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЪрд▓реЗрдВ!
Config / initializers рдореЗрдВ, рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде resque.rb рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
 uri = URI.parse("redis://localhost:6379/") Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password) 

рдЬрд╣рд╛рдВ 6379 рдкреЛрд░реНрдЯ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░реЗрдбрд┐рд╕ рдЪрд▓рддреА рд╣реИред

рд╡реЗрдм-рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, config.ru рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:
 require 'resque/server' run Rack::URLMap.new "/" => AppName::Application, "/resque" => Resque::Server.new 

рдФрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ : 3000 / рд░реЗрд╕рдХреНрдпреВ рдЖрдк рдХрддрд╛рд░реЛрдВ, рдХрд╛рд░реНрдпреЛрдВ, рдЬреАрд╡рди рдХреЗ рдЕрд░реНрде, рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рд░реЗрдХ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗрдВ (рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓рд┐рдкреНрдпрдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди "рдХрд╛рд░реНрдп" рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ lib / рдХрд╛рд░реНрдп / resque.rake рдмрдирд╛рдПрдВ:
 require 'resque/tasks' task "resque:setup" => :environment 

рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВ:
 rake resque:work QUEUE=* 

рдЕрдм рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЖрдк рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдореВрд▓ рдХрд╛рд░реНрдп


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рдХрд┐ рд╡рд╣ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдХрд╛рд░реНрдп рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдРрдк / рдЬреЙрдмреНрд╕, рдФрд░ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝реЗрдВ / initializers / resque .rb:
 Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file } 


рдХрдХреНрд╖рд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

 class SimpleJob @queue = :simple def self.perform #       тАж тАж ... puts "Job is done" end end 


рдХрддрд╛рд░ рдХреЗ рдирд╛рдо рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рд╕рд░рд▓, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ред рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: Resque.enqueue (SimpleJob)ред рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо, "рдЬреЙрдм рд╣реЛ рдЪреБрдХрд╛ рд╣реИ" рд▓рд╛рдЗрди рдХреЛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ: 3000 / рд░реЗрд╕рдХреНрдпреВ рдкрд░, рдЖрдк рдирдИ рдЬреЛрдбрд╝реА рдЧрдИ рдХрддрд╛рд░ рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рднреА рдЖрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 def self.perform(str) #       тАж тАж ... puts "Job is done! #{str}" end 

рдФрд░ рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: Resque.enqueue (SimpleJob, "Yahoo!")ред рд░реЗрдХ рд░реЗрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж: QUEUE = * рдХрд╛рдо рдХрд░реЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдк рдЕрдкреЗрдХреНрд╖рд┐рдд рджреЗрдЦреЗрдВрдЧреЗ: тАЬрдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ! рдпрд╛рд╣реВ! тАЭ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдиреНрдХреНрдпреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рд╕рднреА рддрд░реНрдХ JSON рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддреАрдХ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╕рд╛рдзрд╛рд░рдг рддрд╛рд░ рдмрди рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЬрдЯрд┐рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреИрд╕реЗ рдХрд┐ ActiveRecord рдПрдВрдЯрд┐рдЯреАрдЬ, рд╣реИрд╢ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рд╕рдВрдШреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрдИрдбреА рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рднреАрддрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдХрд╛рд░реНрдп рдЕрдиреБрд╕реВрдЪрдХ


рд░реЗрд╕реНрдХреНрдпреВ-рд╢реЗрдбреНрдпреВрд▓рд░ - рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд░реЗрд╕рдХреНрдпреВ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиред рдпрд╣ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ - рд╡рд┐рд▓рдВрдмрд┐рдд рдФрд░ рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдпред рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢реЗрдбреНрдпреВрд▓рд░ рдЬреЛрдбрд╝реЗрдВред рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ resque.rake рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЕрдм рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 require 'resque/tasks' require 'resque_scheduler/tasks' task "resque:setup" => :environment namespace :resque do task :setup do require 'resque' require 'resque_scheduler' require 'resque/scheduler' Resque.redis = 'localhost:6379' Resque.schedule = YAML.load_file("#{Rails.root}/config/rescue_schedule.yml") end end 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреЛрдб рдХреЗ рдЗрд╕ рднрд╛рдЧ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рд╢реЗрдбреНрдпреВрд▓ рдХреЛ config / Rescue_schedule.yml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ:

 every_two_minute_job: cron: "*/2 * * * *" class: SimpleTask args: some arg description: тАЬevery two minute jobтАЭ 


рдПрдХ рд░реЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЕрдиреБрд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рдиреНрдпрд╛рд╕ / рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ / resque.rb рдХреЛ 'resque_scheduler' рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдЕрдм рд░реЗрдХ рд░реЗрд╕ рдЪрд▓рд╛рдПрдВ: рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╢реЗрдбреНрдпреВрд▓ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рд╣рд░ 2 рдорд┐рдирдЯ рдореЗрдВ рдХреИрд╕реЗ рдЪрд▓рддрд╛ рд╣реИред рд╡рд┐рд▓рдВрдмрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИ:
 Resque.enqueue_at(2.minutes.from_now, SimpleTask, 'some arg') 

рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдордп рдореЗрдВ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
 Resque.enqueue_in(2.minutes, SimpleTask, 'some arg') 

рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд▓рдВрдмрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 Resque.remove_delayed(SimpleTask, 'some arg') 


рдмреЗрд╢рдХ, Resque рдХрд╛ рдХрд╛рдо рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реА рд░рддреНрди рд╣реИрдВ:
github.com/leshill/resque_spec
github.com/justinweiss/resque_unit

рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ


рдЧрд┐рддреБрдм рдкрд░ рд░рд┐рд╕реНрдХ рдХреЛрдб
github.com/defunkt/resque

рд╡рд╣рд╛рдБ Resque-рдЕрдиреБрд╕реВрдЪрдХ
github.com/bvandenbos/resque-scheduler

рдСрдирд▓рд╛рдЗрди рдкреНрд░рд▓реЗрдЦрди
defunkt.io/resque

рд░рд┐рдпрд╛рди рдмреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреНрд░реЗрдиреЗрдХрд╛рд╕реНрдЯ
railscasts.com/episodes/271-resque

RubyLearning рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдбреЗрд╡ рд╣реВрд╡рд░ рдЕрддрд┐рдерд┐ рдЕрдиреБрдЪреНрдЫреЗрдж
rubylearning.com/blog/2010/11/08/do-you-know-resque

рдЬреЙрди рд╣реЛрдорди - рд░реЗрдЬ рдХреЗ рд╕рд╛рде рд░реЗрд▓ рдореЗрдВ рдкреГрд╖реНрдарднреВрдорд┐ рдиреМрдХрд░рд┐рдпрд╛рдВ
blog.jonhoman.com/background-jobs-in-rails-with-resque

рдПрд▓рди рдлреЗрдпрд░ - рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рд░реЗрд╕рдХреНрдпреВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
girders.org/resque-internals-for-heterogenous-systems

Source: https://habr.com/ru/post/In141964/


All Articles