Ruby 1.8.5 en Leopard

enviat per Ramon Salvadó el dilluns 12 de Novembre del 2007 a les 22:08 hores

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.

Instal·lació Ruby, Rails i PostgreSQL en MacOSX

enviat per Ramon Salvadó el dimecres 14 de Febrer del 2007 a les 15:51 hores

Hem trobo que de tant en tant he d’instal·lar tot l’entorn de desenvolupament rails per a un amic que m’ho demana per provar-ho. De fet a força de fer-ho vàries vegades al final vaig automatitzar-ho amb una tasca de capistrano per alleugerir el procés.

Per a que hem serveixi de referència per al pròxim cop (cas que no tingui el meu macbook a mà) els passos a seguir són:

1. Instal·lar les “Xcode tools” (que es troben el els CD’s de sistema), pel compilador.

2. Instal·lar darwinports i actualitzar-lo:

1
2
sudo port selfupdate
sudo port sync

3. Instal·lar programari necessari (ruby, ruby-gems, postgres, etc):


sudo port install screen subversion postgresql81 ruby rb-rubygems

4. Instal·lar les gems que ens interessin, per exemple:


sudo gem install rails rcov gettext mongrel gettext zentest postgres --include-dependencies

5. Preparar la gem del postgres(requereix de fer un petit “hack” per a que trobi les llibreries al compilar) i inicialitzar la base de dades:

1
2
3
4
5
6
7
cd /opt/local/lib/ruby/gems/1.8/gems/postgres-0.7.1
sudo ruby extconf.rb --with-pgsql-include=/opt/local/include/pgsql8 --with-pgsql-lib=/opt/local/lib/pgsql8
sudo make && sudo make install
# Per si de cas
sudo gem install postgres
# Inicialitzem la base de dades (al directori que ens sembli adient)
/opt/local/lib/postgresql81/bin/initdb -D development/pgdata

6. Inicialitzar la base de dades i comprovar que tot funciona amb un projecte de test:

1
2
3
4
5
# Iniciar postgres
pg_ctl -D /development/pgdata -l ~/development/pgdata/psql.log start
# Per aturar-lo pg_ctl -D ~/development/pgdata stop
# Crear un projecte rails per a testejar que tot funciona correctament
rails -d postgresql testproject

7. Opcionalment, continuar la configuració segons aquest post.