Czy w RoR jest możliwość ustawienia wątku który będzie w tle wykonywał pewne operacje? Wiem że można podłączyć to pod crona ale on ma granulację co 1 minutę a ja potrzebuję co 10 sekund. Chcę wykonwać akcję odświeżenia wartości w bazie(lub globalnej) co 10 sekund i co 5 minut dodać wpis do bazy(to mogę zrobić cronem). Aktualnie napisałem osobną aplikację w javie która to robi tylko że to nie jest zbyt dobre rozwiązanie. Chciałbym mieć całą funkcjonalność w jednej aplikacji. Da się to zrobić?
To jest właśnie funkcjonalność do jobów cron’owych. Czytałem o tym ale nie znalazłem sposobu na uruchamianie ich co 10 sekund. Ewentualnie można 6 tasków i w każdym sleep 10sek, 20sek, 30sek … ale to nie wygląda
Clockwork wygląda bardzo obiecująco. Wygląda że mogę zrealizować to co chcę. Jak jednak połączyć się z bazą w railsach?
Mam takiego joba:
require 'clockwork'
module Clockwork
handler do |job|
case job
when 'sh1_curr'
out2_obj = CurrentTemp.where(:name => 'sh1').take; **<-- wiersz z błędem**
if(out2_obj != nil) then
out2_obj = CurrentTemp.new
out2_obj.name = 'sh1'
out2_obj. val = 3
else
out2_obj.val = 2
out2_obj.save
end
when 'sh2_curr'
puts "sh2_curr"
when 'out1_curr'
puts "out1_curr"
when 'out2_curr'
puts "out2_curr"
else
puts "Couldn't find your job!"
end
end
every(10.seconds, 'sh1_curr')
every(10.seconds, 'sh2_curr')
every(10.seconds, 'out1_curr')
every(10.seconds, 'out2_curr')
end
Dostaje taki błąd:
clockwork app/jobs/job.rb
I, [2015-11-21T22:01:54.692650 #25645] INFO – : Starting clock for 4 events: [ sh1_curr sh2_curr out1_curr out2_curr ]
I, [2015-11-21T22:01:54.692722 #25645] INFO – : Triggering ‘sh1_curr’
E, [2015-11-21T22:01:54.692763 #25645] ERROR – : uninitialized constant Clockwork::CurrentTemp (NameError)
/home/skoczo/ruby-workspace/Wedzarnia/app/jobs/job.rb:7:in block in <module:Clockwork>' /home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork/event.rb:54:incall’
/home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork/event.rb:54:in execute' /home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork/event.rb:44:inrun’
/home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork/manager.rb:75:in block in tick' /home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork/manager.rb:73:ineach’
/home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork/manager.rb:73:in tick' /home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork/manager.rb:64:inblock in run’
/home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork/manager.rb:63:in loop' /home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork/manager.rb:63:inrun’
/home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/lib/clockwork.rb:46:in run' /home/skoczo/.gem/ruby/2.2.0/gems/clockwork-1.2.0/bin/clockwork:19:in<top (required)>’
/home/skoczo/.gem/ruby/2.2.0/bin/clockwork:23:in load' /home/skoczo/.gem/ruby/2.2.0/bin/clockwork:23:in’
I, [2015-11-21T22:01:54.692832 #25645] INFO – : Triggering ‘sh2_curr’
sh2_curr
I, [2015-11-21T22:01:54.692876 #25645] INFO – : Triggering ‘out1_curr’
out1_curr
I, [2015-11-21T22:01:54.692926 #25645] INFO – : Triggering ‘out2_curr’
out2_curr
Edit: Znalazłem rozwiązanie. Przekopiowałem joba do katalogu config i dodałem dwa wpisy na początek: