Publicidad:
La Coctelera

Dummy On Rails

O lo que es lo mismo un DOR escribiendo para aprender...

Categoría: Problemas típicos

9 Junio 2008

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...

9 Junio 2008

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!

20 Mayo 2008

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

20 Mayo 2008

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

2 Febrero 2008

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.

9 Junio 2007

Convenciones

Tengo una teoría: todo profesional del código -sea frontend, backend-, con la suficiente dosis de presión, ñapeará su código, independientemente del punto de partida rompiendo las convenciones.

De Rails me resulta fascinante la idea de que, en un framework con cierta complejidad, se hayan creado convenciones coherentes. Si ya hay problemas, desacuerdos y cierto caos cuando estás creando una plantilla sencilla de HTML o una CSS, imagínate la tendencia al caos que puede tener desarrollar un framework por "muy bello" que pueda resultar Ruby .

De hecho... así son las cosas: tienes un framework limpito y ordenado como punto de partida sobre el que vas desarrollando, y poco a poco te das cuenta de que pierdes el criterio a la hora de nombrar métodos, componentes, etc.

Ese es el poder de las convenciones: tener las cosas claras y empezar en pequeñito, o sino, échale un vistazo a los microformatos. (Si te suenan pero no sabes lo que son lee aquí: Microformatos. La Web Semántica para Torpes )

Cambios en Rails 2.0

Nada dura para siempre, y la versión de Rails 2.0 va a eliminar antiguas maneras de trabajar para crear convenciones más coherentes con lo desarrollado hasta ahora.

Así, trabajando en la consola van apareciendo los famosos "DEPRECATION WARNING", o avisos de código que no será soportado en el futuro como es el caso de la etiqueta del helper end_form_tag: DEPRECATION WARNING: end_form_tag is deprecated and will be removed from Rails 2.0 See http://www.rubyonrails.org/deprecation for details.

No es el único cambio. Hazles caso y échale un vistazo a Rails 2.0 Deprecation.

9 Junio 2007

Uno de los problemas típicos cuando se ejecuta MySQL desde la consola es la imposibilidad de ver en el entorno local las bases de datos con las que queremos trabajar. Si ejecutamos el comando:

maquina:~ maquina$ mysql

Esto es lo que vemos:

 mysql> show databases;
 +--------------------+
 | Database |
 +--------------------+
 | information_schema | 
 | test | 
 +--------------------+
 2 rows in set (0.00 sec)
 

¿Dónde están nuestras bases de datos? ¿Porqué no aparecen? La respuesta es que posiblemente hayas accedido como un usuario anónimo y este perfil tiene el acceso limitado.

Compruébalo tecleando:

 mysql> SELECT user(), current_user();
 +---------------------+----------------+
 | user()              | current_user() |
 +---------------------+----------------+
 | yo@localhost | @localhost     | 
 +---------------------+----------------+
 1 row in set (0.26 sec)

Sal de MySQL y vuelve a entrar poniendo el parámetro -uroot

maquina:~ maquina$ mysql -uroot

Ahora el comando mysql> show databases; debería mostrarte las bases de datos que estabas buscando. Vaya susto, ¿eh?

Sobre Dummy On Rails

Como Sísifo, héroe absurdo, fui condenado la ceguera y a empujar una gran roca hasta la cima de la montaña. Una vez arriba, un segundo de felicidad para sentir como la piedra se despeña. Y así una y otra vez. Para siempre...

Categorías