Publicidad:
La Coctelera

Qué hacer cuando "gem install" se cuelga

El repositorio de Rubygems no va precisamente fino últimamente:se come por completo la memoria de tu servidor. Tras el fin de semana intentando instalar Rails en Slicehost, esto es todo lo que he conseguido junto a varias alertas de Swap Usage:

 Bulk updating Gem source index for: http://gems.rubyforge.org/
 

La "amable" respuesta del equipo de soporte de slicehost: "mira en el foro", algo que había hecho a conciencia sin que ninguna de las propuestas funcionara. (Borrar source_cache, matar procesos zombies... etc.).

Manuel me recomendó que para situaciones hiciera la instalación local descargando las gemas directamente en el servidor.

Y estas son las que necesité para Rails 2.0:

  1. Activesupport
  2. Actionpack
  3. Actionmailer
  4. Activerecord
  5. Actionwebservice
  6. Activeresource
  7. Rake
  8. Rails

Créate una carpeta "sources", y dentro de ella descarga con wget cada una de las gemas por el orden que aparece en la lista. La descarga directa es mucho más rápida. Por ejemplo:

 wget http://rubyforge.org/frs/download.php/37753/activesupport-2.1.0.gem
 

Una vez las tengas todas, ejecuta el comando gem con el parámetro -l, que quiere decir que se instalará sin acudir al repositorio de gemas.

 gem install  -l
 

Una vez instalado Rails, aparentemente las gemas causantes de este cuelgue, pude instalar las gemas de mongrel y mongrel_cluster y probar gem update con toda normalidad.

Qué paciencia...

Errores al arrancar mongrel -- openssl (RuntimeError)

Si una vez instalado Rails al arrancar el servidor te muestra un error openssl (RuntimeError) como en el ejemplo:

 => Booting Mongrel (use 'script/server webrick' to force WEBrick) 
 => Rails 2.1.0 application starting on http://0.0.0.0:3000 
 => Call with -d to detach 
 => Ctrl-C to shutdown server 
 ** Starting Mongrel listening at 0.0.0.0:3000 
 ** Starting Rails with development environment... 
 Exiting 
 /usr/local/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb:225:in 
 `require_frameworks': no such file to load -- openssl (RuntimeError) 
 

Una de las soluciones posibles es instalar (o reinstalar) libopenssl-ruby con el comando siguiente.

 sudo apt-get install libopenssl-ruby 
 

A mí me ha funcionado!

Rails 2.0. Creando una aplicación con MySQL

Al crear una aplicación con Rails 2.0.2, te encontrarás que, por defecto, la base de datos es SQLite3. ¿Razón? Sencillez, según el equipo responsable de Rails.

Si estás acostumbrado a trabajar con MySQL, mediante el parámetro "-d mysql", puedes saltarte la versión por defecto tomar como base de datos MySQL.

 rails mi-aplicacion -d mysql
 

Fuente: Rails 2.0.2: Some new defaults and a few fixes

Qué hacer cuando la ubicación de Ruby es diferente en los entornos de desarrollo y producción

Es un problema típico: en tu máquina tienes en acceso a Ruby en una ubicación, por ejemplo en "/usr/local/bin/ruby" y en tu entorno de desarrollo en "/usr/local/bin/ruby".

Esta información es necesaria en la primera línea de los scripts o shebang, que es aquella que llamará a los ejecutables de Ruby.

¿Qué significa esto? Que para ejecutar scripts en Ruby deberías cambiar la primera línea de tus scripts para acomodarlo al entorno en el que vaya a funcionar la aplicación.

Solución

Mediante el parámetro "--ruby /ruta/a/ruby" puedes generar las aplicaciones con el shebang que introduzcas en el parámetro. En este caso, tras averiguar la ruta hacia Ruby el servidor de producción:

puedes predeterminar el shebang de una aplicación para que cuadre con la ruta en producción, mediante el parámetro --ruby

El shebang resultante sería:

Si el enlace a tu máquina de desarrollo no tiene acceso a Ruby en esa ubicación, puedes, mediante un enlace simbólico (symlink) crear un vínculo entre las rutas de tu entorno de desarrollo y la que has definido para producción en el paso anterior. De esta manera, la aplicación funcionaría en ambos entornos sin tener que tocar el shebang.

 # Enlazar la ubicación de Ruby en desarrollo con un symlink
 local$ sudo ln -s /opt/local/bin/ruby /usr/local/bin/ruby 
 local$ sudo ln -s /opt/local/bin/ruby /usr/bin/ruby 
 

Fuente: Deploying Rails Applications. A step by step guide. Ezra Zygmuntowicz

Capgemini Dinamarca incluye oficialmente Ruby On Rails en su offering

El equipo de Jesper Rønn-Jensen, lleva trabajando con Rails como herramienta de prototipado desde hace tiempo para grandes clientes de Capgemini Dinamarca. Jesper es un participante activo en la Comunidad Rails internacional, desarrollando plugins, asistiendo a Conferencias. Ha hecho varias presentaciones explicando los beneficios de Rails para prototipar , como en reboot8.

El caso es que ya es oficial:
Capgemini Dinamarca usa Ruby On Rails como herramienta de prototipado y en algunos casos en producción.

Razones: mayor productividad, menor coste y mejoras notables en la calidad del producto final. Tal y como lo cuentan parece ser la piedra filosofal del software.

We have had working prototypes up and running in a matter of hours. A specific example was a project we decided to implement in Ruby on Rails. Originally the project was estimated at 400 hours in Microsoft .Net. With Ruby on Rails we could deliver it in 110 hours.
-- Jesper Rønn-Jensen

Charla de DHH en la Startup School

Como hicieran ya Jeff Bezos o Marc Andreessen pioneros de la web que conocemos hoy en día, David Heinemeier Hanson ha dado su charla en la Startup School. Aquí el video.

Watch live video from HackerTV on Justin.tv

Errores con rake db:migrate

Estamos en entorno de desarrollo (Mac Os X)...

  • Has creado tu aplicación mediante el comando Rails (rails miapp --database=mysql). Es importante que especifiques el tipo de base de datos que quieres emplear, ya que en caso contrario, por defecto puede tomar SQLite.
  • Has creado la base de datos de desarrollo: con el comando mysqladmin -u root miapp_development.
  • Has configurado el archivo config/database.yml para conectar con la base de datos de desarrollo.

Para comprobar que todo funciona correctamente, acude al shell e introduce el comando:

rake db:migrate

Si el sistema muestra el siguiente mensaje de error:

/usr/local/bin/rake:17: undefined method `require_gem' for main:Object (NoMethodError)

Es porque la versión de rake en nuestro sistema está desactualizada. Para actualizarla, y desde el shell, debemos introducir el siguiente comando.

sudo gem install --remote rake

Vuelve a introducir rake db:migrate y el mensaje de error habrá desaparecido.

Videocasts sobre Ruby y Ruby On Rails

Si quieres comenzar o continuar con tu proceso de autoaprendizaje sobre programación con Ruby On Rails estás de suerte: la Comunidad Rails genera los mejores contenidos didacticos para aprender a programar. 


Imprescindibles:

Peepcode: es de pago. Por el precio de una comida -9$-, tienes un videocast con su documentación y código. Peepcode es imprescindible para aprender sobre tópicos avanzados.

Railscasts: Más de 80 videocasts introductorios sobre todos los temas que puedes necesitar para programar una aplicación con Ruby On Rails.

RubyPlus: de reciente lanzamiento y también gratuito. Su diferencia: no sólo se dedica a Rails, sino que comienza con videocasts de Ruby, algo que ayuda a comprender mejor cómo funciona todo este tinglado.

A disfrutar...