Forum: Italian Ruby user group Errno::EPIPE: Broken pipe:

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Alessandro S. (Guest)
on 2009-03-31 14:55
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....
Paolo M. (Guest)
on 2009-03-31 18:41
Ciao!

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....
Alessandro S. (Guest)
on 2009-03-31 19:15
il log di postgres dice :

2009-03-31 17:11:20 CEST LOG:  unexpected EOF on client connection

Paolo M. wrote:
> Ciao!
>
> E' un problema di Rails o uno del db? Che dice il suo log?
>
> Paolo
>
Paolo M. (Guest)
on 2009-04-01 02:19
Alessandro S. wrote:
> il log di postgres dice :
>
> 2009-03-31 17:11:20 CEST LOG:  unexpected EOF on client connection


Sostanzialmente hai un loop infinito in environment.rb che fa query al
db e poi delle normali query nei controller. L'impressione è che questo
tipo di concorrenza non sia gestito o da rails o dal driver postgres ma
non è che googlando abbia trovato granché tranne questo pastie che non
ho capito se ha a che fare col tuo caso
http://pastie.org/pastes/11811/reply
Forse la scarsità di risultati è dovuto al fatto che a pochi è venuto in
mente di usare environment.rb come deamon e non come semplice script di
configurazione ;-)

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.

Però perché non sposti quel codice in uno script da lanciare con
script/runner? Ti occuperà più ram ma sicuramente sopravviverà meglio al
tempo e alle prossime release di Rails. Proprio oggi un piccolo
pasticcio che ho fatto un paio d'anni fa mi si è ritorto contro
facendomi perdere tre d'ore tra debug e sistemazione del codice (è
un'altra puntata della mia serie "migrazione a rails 2.3 e gettext").
Meglio usare le soluzioni canoniche, anche quando sembrano meno
brillanti di quelle che ci inventiamo :-)

Paolo
Alessandro S. (Guest)
on 2009-04-01 03:38
> Però perché non sposti quel codice in uno script da lanciare con
> script/runner? Ti occuperà più ram ma sicuramente sopravviverà meglio al
> tempo e alle prossime release di Rails. Proprio oggi un piccolo
> pasticcio che ho fatto un paio d'anni fa mi si è ritorto contro
> facendomi perdere tre d'ore tra debug e sistemazione del codice (è
> un'altra puntata della mia serie "migrazione a rails 2.3 e gettext").
> Meglio usare le soluzioni canoniche, anche quando sembrano meno
> brillanti di quelle che ci inventiamo :-)
>
> Paolo

Volevo evitare di usare DRB o simili ma mi sà che alla fine mi tocca...
Paolo M. (Guest)
on 2009-04-01 13:05
Alessandro S. wrote:
> 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.

Paolo
This topic is locked and can not be replied to.