Zainspirowany ostatnim shootoutem (http://antoniocangiano.com/2008/12/09/the-great-ruby-shootout-december-2008/) i wiadomością o kompatybilności RoR 2.2 z Ruby 1.9 postanowiłem pobawić się tym zestawem i dać się rozwalić skokowi wydajnościowemu (we wszystkich mikrotestach, moich także, Ruby 1.9 wciąga nosem 1.8). No i tu jest problem, bo nie potrafię zmusić gema mysql do sensownej kompilacji (a jeśli już zmuszę, to nie działa jak trzeba).
System: Ubuntu 8.10
Ruby 1.9.0 (z paczek ubuntowych), libmysql-ruby1.9 z Debian Experimental - gem się nie kompiluje (nie znajduje kernelowego version.h, a jeśli mu stworzyć/skopiować takowy - wysypuje się na definicji struct RString).
Po zastosowaniu małego workaroundu z komentarzy do artykułu (http://gnufied.org/2007/12/21/mysql-c-bindings-for-ruby-19/) gem się kompiluje i nawet wydaje działać, ale nie przechodzi nawet proste rake db:create (marudzi o kodowaniu i kolacji)
Czysto-rubiowy gem mysql oczywiście odpada, bo wyleciał z RoR 2.2. A dopiero ta wersja nadaje się (ponoć) do odpalania pod Rubym 1.9.
To jak, udało się komuś taki zestaw szczęśliwie postawić, na łubudu?
Spróbuj mysqlplus
U mnie działa, chociaż Railsy da się odpalić na webrick’u, mongrel (przynajmniej to co jest w gemach) nie chce się skompilować. Thin (po poprawieniu kilku prostych miejsc w EventMachine - zmienili nazwy kilku funkcji w C w 1.9.1 w stosunku do 1.9) też się odpala ale wydajność ma 3x słabszą od webricka
Jeśli chodzi o gemy to musiałem ręcznie hackować eventmachine, hpricota i kilka innych podstawowych gemów żeby się skompilowały pod 1.9.1 - wszystko jest bardzo eksperymentalne póki co.
Microbenchmarki niestety nie pokazują jak szybko będzie działać większa aplikacja typu RoR. Póki co maintainerzy gemów b. powoli go adoptują, widocznie nie ma zapotrzebowania (brak problemów z szybkością 1.8 zapewne )
Czy robił ktoś jakieś porównanie Rails 2.2.2 na Ruby 1.9 oraz na Ruby EE 1.8 + Passenger?
Czy Passenger zadziała z Ruby 1.9?
Interesowałby mnie czas wykonania identycznego requestu (baza, szablon, layout, bez cache), jeśli nie na Passengerze, to np. na Thinie.