# Errno::EPIPE: Broken pipe:

**URL:** <https://www.ruby-forum.com/t/errno-broken-pipe/164353>\
**Category:** IT\
**Created:** [March 31, 2009, 12:55pm UTC](https://www.ruby-forum.com/t/errno-broken-pipe/164353 "2009-03-31T12:55:09Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![alesc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@alesc](https://www.ruby-forum.com/u/alesc)\
**Post date:** [March 31, 2009, 12:55pm UTC](https://www.ruby-forum.com/t/errno-broken-pipe/164353/1 "2009-03-31T12:55:09Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![alesc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@alesc](https://www.ruby-forum.com/u/alesc)\
**Post date:** [March 31, 2009, 4:41pm UTC](https://www.ruby-forum.com/t/errno-broken-pipe/164353/2 "2009-03-31T16:41:06Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![alesc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@alesc](https://www.ruby-forum.com/u/alesc)\
**Post date:** [March 31, 2009, 5:15pm UTC](https://www.ruby-forum.com/t/errno-broken-pipe/164353/3 "2009-03-31T17:15:07Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![alesc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@alesc](https://www.ruby-forum.com/u/alesc)\
**Post date:** [April 1, 2009, 12:19am UTC](https://www.ruby-forum.com/t/errno-broken-pipe/164353/4 "2009-04-01T00:19:28Z")

</div>

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](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

---

<div class="post-metadata">

**Author:** ![alesc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@alesc](https://www.ruby-forum.com/u/alesc)\
**Post date:** [April 1, 2009, 11:05am UTC](https://www.ruby-forum.com/t/errno-broken-pipe/164353/5 "2009-04-01T11:05:16Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![alesc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@alesc](https://www.ruby-forum.com/u/alesc)\
**Post date:** [April 1, 2009, 1:38am UTC](https://www.ruby-forum.com/t/errno-broken-pipe/164353/6 "2009-04-01T01:38:11Z")

</div>

> 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…
