Merb es un framework MVC superligero escrito en Ruby que esta atrayendo mucha atencion ultimamente por su alta performance que supera la de Rails, con el que tiene muchas similitudes. Muchas aplicaciones interesantes van apareciendo sobre Merb, un ejemplo es Feather que segun sus autores es “el blog mas simple que funciona”.
Suena bien, un framework ultra ligero y rapido y un blog simple. Exactamente lo que necesitamos.
Instalando Merb
Segun los autores Feather no va bien con Merb 0.9.3, asi que asegurate de congelar la version 0.9.2. Para esto tienes varias opciones, nosotros iremos con la mas facil.
Instalamos las dependencias de Merb$ gem install erubis rake json_pure rspec rack hpricot mime-typesY despues las GEMAS necesarias (merb, merb-action-args, merb-assets, merb-cache, merb-core, merb-mailer, merb-more, merb_datamapper, merb_helpers) de la version 0.9.2 una cada vez con
$ gem install GEMA -v 0.9.2
Instalando el Feather Blog
El Feather sigue la filosofia de Merb, de venir muy ligero y brindar la posibilidad de ser aumentado con plugins. Primero instalemos el blog y mas tarde veremos sus plugins.
$ git clone git://github.com/mleung/feather.git $ cd featherAhora repitiendo cada vez
$ merbEl framework nos ira diciendo cuales gemas necesita para levantar el server muy user friendly
~ Please install do_mysql with gem install do_mysqlo ya las propias del Feather (ver config/init.rb)
/usr/lib/ruby/site_ruby/1.8/rubygems.rb:379:in `report_activate_error': Could not find RubyGem archive-tar-minitar (>= 0) (Gem::LoadError)a mi me faltaron (datamapper, do_mysql, tzinfo y archive-tar-minitar) pero para ti pueden variar. Cuando este todo bien, el Merb levantara para generar un database.sample.yml en config/ para que configures tu base de datos.
~ A sample file was created called database.sample.yml for you to copy and edit.
Una vez hayas editado el database.yml, necesitamos migrar la base de datos. Una de las caracteristicas distintivas de Merb es ser agnostico en cuanto a servidor (puedes usar Mongrel, Evented Mongrel, Thin, Rack, ..) y a ORM (viene con soporte para ActiveRecord, Datamapper y Sequel). Aqui de nuevo referirse a config/init.rb. El Feather usa Datamapper un ORM muy interesante que aventaja a ActiveRecord en algunos enfoques de la OOP y en cuestiones de implementacion tambien.
Datamapper no tiene las clasicas migraciones de ActiveRecord. Migremos la base de datos.$ merb -i -e production >> DataMapper.auto_migrate!
Fijarse que lo estamos haciendo en produccion, si lo quieres en desarrollo te sobra el -e production. Ahora ya debe el Feather arrancar sin problemas.
Desplegando Merb con Mongrel y Nginx en produccion
Para desplegar un Merb tienes varias opciones. De nuevo aqui elegiremos lo mas simple: Servidores Mongrels detras de un proxy nginx. Ajusta los valores de las CONSTANTES segun las tuyas propias. Configuremos el nginx, primero un upstream
upstream NOMBRE_DE_TU_UPSTREAM {
server 127.0.0.1:PUERTO;
}
seguido adicionemos una seccion host al nginx. Es casi como un host Rails.
server {
listen 80;
client_max_body_size 50M;
server_name www.TUDOMINIO.es;
root /PATH_FEATHER/public;
#Want to log? include this
#access_log /var/log/nginx/nginx.FEATHER_BLOG.access.log main;
if (-f $document_root/system/maintenance.html) {
rewrite ^(.*)$ /system/maintenance.html last;
break;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect false;
proxy_max_temp_file_size 0;
if (-f $request_filename) {
break;
}
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
if (!-f $request_filename) {
proxy_pass http://NOMBRE_DE_TU_UPSTREAM;
break;
} }
error_page 500 502 503 504 /500.html;
location = /500.html {
root /PATH_FEATHER/public;
}
}
Reiniciando el nginx ya deben llegarle peticiones por la web al Merb.
Ejecutando el Merb en produccion
De nuevo aqui elegiremos lo mas simple para arrancar y parar un Merb.
Desde la raiz del Feather para arrancar el server el parametro -c 1 dice la cantidad de servers que se levantaran, en este caso solo uno.$ merb -e production -c 1 --port PUERTOY para pararlos todos. En mi caso son Mongrels, si los tuyos son Thin pues cambialo acorde.
$ merb -a mongrel -k all
Existen otras opciones como merb-manage que permite configurar facilmente y garantizar reinicio de los Merbs en produccion, o como en la fuente para nuestra configuracion de nginx usar tareas de Capistrano.
Ya tienes un blog Feather en internet.
Instalando los plugins del Blog
Segun los autores de Feather aun no existe un repositorio publico para los plugins, asi que lo mas sencillo es ponerlos en una carpeta publica propia. Primero descarga los plugins fuera de la raiz del Feather.
$ git clone git://github.com/eldiablo/feather-plugins.git $ cd feather-plugins; rake feather:package
La tarea Rake te habra creado una carpeta pkg cuyo contenido podras mover a public/plugins en la carpeta del Feather. Entrando en el panel de administracion http://www.TUDOMINIO.es/admin con admin/password podras configurar tu blog.
Para instalar los plugins solo necesitas indicar la URL desde donde se instalaran, en este caso http://www.TUDOMINIO.es/plugins/feather-YYY-1.0.yml con YYY ajustada podras instalar el plugin que desees.
Ahorrandote el paso anterior
Puedes instalar los plugins directamente usando los que he desplegado yo en http://www.least-significant-bit.com/plugins/feather-YYY-1.0.yml.
Para no tener que entrar el campo URL cada vez he preparado un arreglo de 2 lineas al Feather, puedes descargartelo desde mi repo en GitHub con$ git clone git://github.com/joahking/feather.git
y tendras el camino por defecto de los plugins con el valor http://www.least-significant-bit.com/plugins/feather-YYY-1.0.yml. Si lo prefieres puedes editar el controlador admin/plugins.rb, la accion new y edita la variable @plugins_repo con el valor que desees.
Para este blog uso solo los plugins minimos (los nombres muestran claro el uso del plugin):
- feather-formatters
- feather-comments
- feather-tagging
- feather-feeds
- feather-sidebar
- feather-search
Eso es todo, a bloggear!