Ruby 1.8.5 en Leopard
Leopard porta tot l’entorn de desenvolupament per a Ruby on Rails i Ruby integrat, cosa que està molt bé ja que facilita enormement l’arrencada de la gent que comença a desenvolupar amb aquestes tecnologies.
La versió de Ruby instal·lada es la 1.8.6 (amb alguns patchs interessants com ara el de suport per a dtrace). Algunes distribucions com ara centos 5 o debian etch utilitzen la versió 1.8.5. Això vol dir que si tenim aplicacions en producció corrent sobre aquestes distribucions probablement voldrem desenvolupar sobre la mateixa versió de Ruby per tal d’evitar “sorpreses”.
Per a aconseguir això podem compilar directament dels fonts o utilitzar macports. La cosa es que en el cas de voler utilitzar macports ens trobarem que no existeix variant per la versió 1.8.5.
El que podem fer es crear el nostre port a partir de la revisió de subversion del repositori macports del port de ruby que es corresponia a la versió 1.8.5:
Primer hem de crear un repositori de ports local:
1 2 |
mkdir /Users/Shared/dports sudo sed -e '1i file:///Users/Shared/dports' -i~ /opt/local/etc/macports/sources.conf |
Seguidament treiem la versió del repositori que ens interessi:
1 2 3 |
cd /Users/Shared/dports svn co --revision 21487 http://svn.macports.org/repository/macports/trunk/dports/lang/ruby/ lang/ruby/ portindex /Users/Shared/dports |
Llavors en un món ideal ja podríem instal·lar fent:
sudo port install ruby |
I això instal·laria la versió del port en el nostre repositori local (1.8.5), el que passa es que per a que Ruby funcioni en Leopard cal aplicar uns patchs d’apple al codi font segons s’explica aquí
Així doncs el que caldrà fer es descarregar els fitxers dels patchs al directori files del nostre port i modificar el fixter Portfile per a que els apliqui. Si fem això veurem que s’apliquen netament excepte un que falla degut a que aquests patchs estan pensats per a la versió 1.8.6 de Ruby.
El que cal fer quan falla la instal·lació és anar al directori de treball del port, revisar el patch que falla i veure si podem modificar-lo per a aplicar-lo a la versió 1.8.5.
La modificació és molt senzilla, es tracta del fitxer ignore-gsetcontext.diff i un cop modificat per a la versió 1.8.5 queda així:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
--- eval.c.orig 2007-10-31 12:03:10.000000000 +0100 +++ eval.c 2007-10-31 12:03:10.000000000 +0100 @@ -29,9 +29,17 @@ #endif #include <stdio> -#if defined(HAVE_GETCONTEXT) && defined(HAVE_SETCONTEXT) -#include <ucontext> -#define USE_CONTEXT +#if defined(HAVE_GETCONTEXT) && defined(HAVE_SETCONTEXT) +# if defined(__APPLE__) +# include <availabilitymacros> +# if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040 +# include <ucontext> +# define USE_CONTEXT +# endif +# else +# include <ucontext> +# define USE_CONTEXT +# endif #endif #include <setjmp> |
Arribats a aquest punt podem instal·lar el port amb la comanda habitual:
sudo port install ruby |
Un cop fet tot això disposarem de 2 versions de ruby instal·lades la 1.8.6 que es la que ve per defecte en Leopard i la 1.8.5 que es la que hem instal·lat via macports.
Podem fer servir una o altra segons ens convingui en funció de l’ordre de càrrega dels binaris de macports en la nostra variable PATH, si posem primer la de macports (/opt/local/bin i /opt/local/sbin) s’utilitzarà per defecte la versió 1.8.5 de Ruby i en cas contrari la 1.8.6.


M’agrada molt que Leopard tingui el Ruby i el Ruby on Rails integrat!
Una de las mevas gemas preferidas, Hpricot, es també al Leopard, crec… No ho se, jo soc ubuntaire :) Es la meva xicota la que te el MacBook. :D