def run
loop do
appointments = Calendariable.find(:all, :conditions =>
“(start_time BETWEEN '#{Time.now.strftime(”%F %H:00")}’ AND '#{(Time.now
3600).strftime("%F %H:00")}’)")
appointments.each do |appo|
appo.calendar_type.camelcase.constantize.find(appo.calendar_id).trigger_now()
end
sleep 3600
end
end
problema, appena faccio un altra query al db (quindi appena carico una
pagina del sito) mi parte un
"Errno::EPIPE: Broken pipe: SELECT * FROM “calendariables” WHERE
((start_time BETWEEN ‘2009-03-31 12:00’ AND ‘2009-03-31 13:00’) AND
deleted = ‘false’) "
Qualche idea?
Preferirei non dover fare un demone esterno all’applicazione…
E’ un problema di Rails o uno del db? Che dice il suo log?
Paolo
Alessandro S. wrote:
ciao,
ho questo pezzo di codice in enviroment.rb:
fork do
ticker = CalTicker.new()
ticker.run
end
def run
loop do
appointments = Calendariable.find(:all, :conditions =>
“(start_time BETWEEN '#{Time.now.strftime(”%F %H:00")}’ AND '#{(Time.now
3600).strftime("%F %H:00")}’)")
appointments.each do |appo|
appo.calendar_type.camelcase.constantize.find(appo.calendar_id).trigger_now()
end
sleep 3600
end
end
problema, appena faccio un altra query al db (quindi appena carico una
pagina del sito) mi parte un
"Errno::EPIPE: Broken pipe: SELECT * FROM “calendariables” WHERE
((start_time BETWEEN ‘2009-03-31 12:00’ AND ‘2009-03-31 13:00’) AND
deleted = ‘false’) "
Qualche idea?
Preferirei non dover fare un demone esterno all’applicazione…
Eventualmente prova ad aggiungere config.threadsafe! alla configurazione
(solo con la 2.3). Se il problema era la concorrenza non supportata,
magari così lo sistema.
Volevo evitare di usare DRB o simili ma mi sà che alla fine mi tocca…
Non usare DRb. Fai invece un programmino ruby a parte e lancialo con
script/runner così ti carica i modelli e le configurazione di rails ed
accedi al db con activerecord. Se stai su Unix fallo poi partire con uno
script in
/etc/init.d insieme all’applicazione rails così sopravvive ai reboot
pure lui.