Merb, Datamapper y RSpec: instalando edge versions

Posted by joahking
on Jul 15, 08

Merb el framework en Ruby para hackers y su ORM de moda Datamapper se encuentran en carrera hacia la version 1.0 que saldra segun Ezra este verano. Estos dos proyectos siguen la inteligente filosofia de separar en modulos y gemas cada funcionalidad, para que vayas cargando en tu environment las funcionalidades segun las vayas necesitando. Asi se mantienen las apps ligeras y con performances ultrarapidos.

Como queremos estar al dia con lo ultimo que vaya apareciendo tendremos que instalar directamente desde los repos en GitHub. La mejor manera de seguir un proyecto en sus avances hasta su release estable es vivir en el borde. Asi que olvidemosnos por un momento del comodo gem install GEMA y procedamos como los hackers.

Para mas detalles refierete al libro online de Merb o a Mr. Google.

Instalando las dependencias de Merb

Primero instalemos las gemas de las que depende Merb:
sudo gem install rack mongrel json erubis mime-types rspec hpricot mocha rubigen haml markaby mailfactory ruby2ruby

La gema json_pure es necesaria para ejecutar Merb con Jruby, la implementacion de Ruby en Java. Si no es tu caso json es mas eficiente, pero si mas adelante al instalar te la exigen instalala tambien.

Si tienes problemas instalando alguna gema chequea estos dos articulos anteriores sobre el tema.

Instalando Merb desde Github

Primero descargamos Merb de sus repositorios en GitHub.
git clone git://github.com/wycats/merb-core.git
git clone git://github.com/wycats/merb-plugins.git
git clone git://github.com/wycats/merb-more.git
Seguidamente instalamos cada parte en las que viene Merb separado:
cd merb-core ; rake install ; cd ..    
cd merb-more ; rake install ; cd ..
cd merb-plugins; rake install ; cd ..

Instalando las dependencias de Datamapper

DataMapper ha sido separado en las gemas dm-core y dm-more, la gema datamapper ya esta desactualizada.

Si tienes una version antigua de datamapper, data_objects, do_mysql (do_postgres o do_sqlite3 segun el adaptador que vayas a usar), y un merb_datamapper anterior a la version 0.9: debes eliminarlas antes de seguir.

Datamapper depende de las gemas extlib y data_objects. Comencemos por descargar estas de Github e instalarlas. La gema extlib depende de la gema english y data_objects de addressable, asi que si quieres ir mas rapido antes haz:
sudo gem install english addressable

Sino sigue adelante y ya te enteraras de las gemas que te falten. Descargamos extlib y data_objects y los instalamos.

git clone git://github.com/sam/extlib.git  
git clone git://github.com/sam/do.git

cd extlib
rake install ; cd ..

cd do
cd data_objects
rake install ; cd ..
cd do_mysql  # || do_postgres || do_sqlite3
rake install
En caso de que te falten gemas de las que dependa la que estes instalando veras mensajes asi:
(in /home/joahking/dev/merb/do/data_objects)
ERROR:  While executing gem ... (RuntimeError)
    Error instaling pkg/data_objects-0.9.1:
    data_objects requires addressable >= 1.0.3 
rake aborted!

Con que instales la gema mencionada estaras ok para luego repetir rake install.

Problema instalando el adaptador do_sqlite3

Si estas en una distro de Debian y ves este mensaje:
ERROR:  Error installing pkg/do_sqlite3-0.9.3:
    ERROR: Failed to build gem native extension.

/usr/bin/ruby1.8 extconf.rb install --local pkg/do_sqlite3-0.9.3 --no-update-sources
checking for sqlite3.h... no
Que dice que te falta alguna libreria, en este caso es el paquete libsqlite3-dev, instalalo con:
sudo apt-get install libsqlite3-dev

y de nuevo rake install. Este error es similar a los de do_postgres y do_mysql en caso que te decidas por alguno de estos adaptadores.

Instalando Datamapper

Ya se ha dicho que Datamapper cumple con el principio de venir bien separado en gemas y modulos para que los incluyas en tus modelos segun los necesites. Descarguemos ambas partes e instalemoslas:
git clone git://github.com/sam/dm-core.git
git clone git://github.com/sam/dm-more.git

cd dm-core ; rake install ; cd ..
cd dm-more
rake install

Instalando RSpec

RSpec es un framework Ruby para desarrollar siguiendo la filosofia Behaviour Driven Development que a muy grosso modo consiste en ir escribiendo las especificaciones de tu codigo o proyecto a la par de que lo implementas.

Merb es agnostico en cuanto a ORM, libreria de JavaScript y lenguaje de templates. Tambien es asi para el test framework que desees usar (test-unit, mocha, shoulda, rr). Aqui nos decidiremos por RSpec. Te recomiendo lo instales asi podras seguirme en la serie de articulos sobre Desarrollo Agil que planeo publicar.

git clone git://github.com/dchelimsky/rspec.git
cd rspec
rake gem
sudo gem install pkg/rspec-VERSION.gem
Al lanzar rake gem te saldra esta info:
  Successfully built RubyGem
  Name: rspec
  Version: 1.1.4
  File: rspec-1.1.4.gem

donde Version es la que usaras en el comando gem install pkg.... Y ya lo tienes todo.

Para actualizar todas las gemas

Para actualizar todas las gemas desde los fuentes, te vas al directorio donde las descargaste y:
git pull ; rake install

Problemas al actualizar las gemas

En subsecuentes updates del codigo base cuando intentes el rake install podria aparecer este error originado por el hecho de que ya tenias instaladas las gemas.
ERROR:  While executing gem ... (OptionParser::InvalidOption)
    invalid option: --no-update-sources
rake aborted!
Command failed with status (1): [sudo gem install --local pkg/data_objects-...]
/home/joahking/dev/merb/do/data_objects/Rakefile:33
(See full trace by running task with --trace)
El problema es la opcion --no-update-sources del gem en la linea indicada en el Rakefile:
# en Rakefile
  task :install => [ :package ] do
    sh %{#{SUDO} jruby -S gem install --local pkg/#{spec.name}-#{spec.version} --no-update-sources}, :verbose => false
  end
Yo soluciono esto cambiandome a una nueva branch del git:
git checkout -b quitando_opcion_no_update_sources
y en esta branch quitar la opcion de todos los Rakefile. Con un script como este me evito hacerlo manualmente:
for file in `find . -name Rakefile`; do sed 's/--no-update-sources//g' $file > "$file"_tmp; mv "$file"_tmp $file; done

y de nuevo rake install. buena suerte hacker!

Comments

Leave a response

Comment