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!