Część osób próbuje korzystać z Ruby 1.9 i najnowszych Railsów (w momencie pisania 2.3.4).
Jest jednak sporo problemów, które trzeba rozwiązać, aby Railsy zaczęły działać. W tym wątku chciałbym umieścić
informacje o tych problemach oraz o najbardziej sensownych rozwiązaniach.
Mongrel - posiada stare wywołania RSTRING§->ptr oraz RSTRING§->len
Kodowanie znaków w widokach - domyślnie brane jest zdaje się z LC_ALL, co powoduje błędy pt. Encoding::CompatibilityError: incompatible character encodings: …
Mysql - problem zarówno z RSTRINGIEM, jak i z właściwą obsługą kodowania. Rozwiązanie: “poprawiona” wersja MySql-a. Uwaga: piszę w cudzysłowie, bo rozwiązanie jest bardzo powierzchowne, zakłada, że w bazie trzymamy dane w UTF-8, co nie zawsze jest prawdą.
Jak wyżej dla Postgresa. Rozwiązanie poprawiona wersja PG. Działa ale tylko połowicznie - tzn. jeśli wszędzie mamy utf-8, to spoko. Jeśli jednak po stronie aplikacji chcielibyśmy używać np. iso, a w DB UTF-8, to niestety się wykrzaczy. Problem polega na tym, że prze wysłaniem łańcucha do serwera SQL nie jest sprawdzane jego kodowanie.
isitruby19.com to strona, na której można sprawdzać, czy gemy działają pod 1.9. Tak jak w powyższym przypadku, odpowiedzi pozytywne, nie znaczą, że wszystko pięknie śmiga. Ale często jest to najłatwiejszy sposób na znalezienie rozwiązanie.
No ja ostatnio miałem porażkę, której póki co nie udało mi się rozwiązać.
U mnie “produkcja”, to np. 40 studentów piszących samosprawdzające się sprawdziany z Rubiego
[quote=apohllo]No ja ostatnio miałem porażkę, której póki co nie udało mi się rozwiązać.
U mnie “produkcja”, to np. 40 studentów piszących samosprawdzające się sprawdziany z Rubiego :)[/quote]
Uuu… taka produkcja to pewnie potrafi wyłożyć każdą aplikację
[quote=drogus][quote=apohllo]No ja ostatnio miałem porażkę, której póki co nie udało mi się rozwiązać.
U mnie “produkcja”, to np. 40 studentów piszących samosprawdzające się sprawdziany z Rubiego :)[/quote]
Uuu… taka produkcja to pewnie potrafi wyłożyć każdą aplikację :D[/quote]
Z pewnością - mówisz im - napiszcie funkcję, która akceptuje parametry i zwraca wartość, bla, bla, bla i jakiś 20% zacznie używać puts i gets
A co do meritum - kolejna zagwozdka rozwiązana - passenger nie przekazuje zmiennych LANG i LC_CTYPE, przez co nawet jak odpalamy aplikację w produkcji via mongerl lub webrick i wszystko bangla, to w Passengerze mogą być klocki.
Rozwiązanie - ruby_wrapper:
#!/bin/bash
exec /usr/local/bin/ruby -E utf-8:utf-8 "$@"
Zamiast zwykłego rubiego, podsuwamy mu taki “egzekutabel” (PassengerRuby … w pliku konfiguracyjnym Apache’a lub Nginxa) i jeśli używamy utf-8 to powinno pomóc (w szczególności w odniesieniu do templatów Hamla lub Erb’a, aka “invalid byte sequence in US-ASCII”)