Aggiornamen a Rails 2.3.2 - ruby 1.9.1 e problema con Apache

Salve a tutti.

Recentemente ho aggiornato sia ruby che rails per la mia applicazione.

L’applicazione in oggetto funzionava correttamente su ruby 1.9.0 e rails
2.2.2 (veniva a sua volta da ruby 1.8.7).

Ho quindi aggiornato a ruby 1.9.1 e rails 2.3.2.

L’applicazione continua a funzionare correttamente, salvo pochi
interventi sul codice di secondaria importanza.

Quello che non funziona invece è il vero e proprio server web.

Infatti quando lo metto in production ho un server Apache2 che a sua
volta reindirizza su un server Thin tramite il modulo proxy. Ho scelto
il server Thin perche’ Mongrel non è compatibile con ruby 1.9.

Ebbene il problema e’ che alcune volte (non sempre) quando richiedo una
pagina web il browser invece di farmi vedere la pagina mi fa vedere il
sorgente della pagina.

La cosa e’ molto strana perche’:

  1. Non succede sempre. Ad esempio succede per 3 o quattro volte e poi
    non capita piu’ nel corso della giornata

  2. quando succede basta fare reload dal browser e va tutto ok (fa vedere
    la pagina vera invece del sorgente)

  3. penso che il problema sia di apache perche’ se dalla directory dove
    sta l’applicazione lancio “thin start” oppure “thin start -e production”
    e poi mi collego a nomeserver:3000 non capita mai.

  4. dipende dal server e non dal browser. Ho provato con Safari (Mac OS),
    Firefox (Linux e Win) e Internet Explorer (Win) e il problema si è
    verificato almeno una volta su ognuno.

  5. Ovviamente con ruby 1.9.0 e rails 2.2.2 non si e’ mai verificato.

Ogni idea e’ bene accetta.

Grazie a tutti.

OK, problema risolto.

Riporto la soluzione per quanti si dovessero imbattere nello stesso
problema.

Il problema sono le lettere accentate che, quando presenti, sembrano far
arrabbiare l’accoppiata thin + apache.

Per ogni lettera accentata presente nella pagina web, infatti, il server
thin si mangiava un carattere alla fine della pagina web di cui faceva
il rendering.

Per cui poiché la pagina web finiva (ovviamente) con il tag ,
questo tag diventava </html

Ora il problema è che sulla pagina successiva veniva inviato il ‘>’
mancante, per cui quella pagina (e non quella in cui erano presenti le
lettere accentate) non era riconosciuta come pagina web dal browser che
pertanto ne mostrava il sorgente.

L’errore sembrava occasionale perché succedeva su diverse pagine e non
sempre succedeva sulla stessa pagina. Ma poi ho scoperto che succedeva
sistematicamente visitando prima una certa pagina e poi un’altra
qualsiasi. Ovviamente la ‘certa pagina’ era quella che conteneva le
lettere accentate.

Penso che il problema dipenda dal fatto che le lettere accentate essendo
caratteri unicode occupino 2 byte anziché 1. Questo fa si che quando il
server thin elabora la pagina si ferma un carattere prima perché non
tiene conto che il carattere accentato ha occupato un byte in piu’.

Ora ho tolto dall’applicazione tutte le lettere accentate, tanto per
andare sul sicuro.

Da ulteriori analisi è poi emerso che l’errore era presente anche con
rails 2.2.2 e ruby 1.9.0 e inoltre lo fa anche facendo ‘thin start’.
Tuttavia in tutti questi altri casi, pur troncando la pagina, poi non
vuole mandare il ‘>’ all’inizio della pagina successiva, e pertanto il
tutto sembra funzionare bene.

Se ho risolto un problema a qualcuno, avanzo un caffè… anzi no, meglio
un caffe’…

Saluti

Sam P. wrote:

OK, problema risolto.

Riporto la soluzione per quanti si dovessero imbattere nello stesso
problema.

Il problema sono le lettere accentate che, quando presenti, sembrano far
arrabbiare l’accoppiata thin + apache.

Per ogni lettera accentata presente nella pagina web, infatti, il server
thin si mangiava un carattere alla fine della pagina web di cui faceva
il rendering.

Ti consiglio di segnalare il problema agli sviluppatori di thin. Se c’è
davvero un bug lo sistemeranno e potrai rimettere le lettere accentate,
mentre se non c’è ti diranno come risolvere il tuo problema, ed
inoltre…

Se ho risolto un problema a qualcuno, avanzo un caffè… anzi no, meglio
un caffe’…

… a quel punto saranno in tanti a doverti un caffé, ma stai attento
perché troppa caffeina fa male :slight_smile:

Paolo