Instalar Ruby on Rails en Linux

Después de leer multitud de alabanzas hacia Ruby on Rails en varios blogs y de boca de cierto individuo, me he decidido a instalarlo y comprobar si es tan bueno como dicen.

He aprovechado para hacer un pequeño tutorial sobre el proceso de instalación en Debian (o en cualquier otro Linux), que lo cierto es que es bastante complejo. También incluyo un mini-ejemplo de aplicación web en Ruby on Rails.

Os adelantaré que el proceso de deploy de la aplicación web me ha recordado muchísimo al deploy de servlets en Tomcat, y de hecho, según dicen, Ruby on Rails pretende ser una suerte de PHP pero orientado a objetos, y además, elegante y divertido de programar. En sí, Ruby es el lenguaje de programación, que ya existía previamente, y Rails es un framework para Ruby para desarrollar aplicaciones web.

Instalamos rails y el módulo de ruby para Apache. Debian se encargará de instalarnos el resto de dependencias (que son muchas).

newton:~# apt-get install ruby libapache-mod-ruby


Una vez instalado, procedemos a bajarnos RubyGems (http://rubygems.rubyforge.org/wiki/wiki.pl?RubyGems).
newton:~# wget http://rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz

Lo descomprimimos con tar xvfz rubygems-0.8.11.tgz como es usual, y entrando en la carpeta, ejecutamos lo siguiente:
newton:~/rubygems-0.8.11# ruby setup.rb

Si todo ha ido bien debería aparecer algo como esto:

Successfully built RubyGem
Name: sources
Version: 0.0.1
File: sources-0.0.1.gem


Instalamos entonces rails, contestando afirmativamente a la instalación de las dependencias necesarias, como se muestra:

newton:~/rubygems-0.8.11# gem install rails

Attempting local installation of 'rails'
Local gem file not found: rails*.gem
Attempting remote installation of 'rails'
Updating Gem source index for: http://gems.rubyforge.org
Install required dependency rake? [Yn] y
Install required dependency activesupport? [Yn]
Install required dependency activerecord? [Yn]
Install required dependency actionpack? [Yn]
Install required dependency actionmailer? [Yn]
Install required dependency actionwebservice? [Yn]

Successfully installed rails-0.14.3
Successfully installed rake-0.6.2
Successfully installed activesupport-1.2.3
Successfully installed activerecord-1.13.0
Successfully installed actionpack-1.11.0
Successfully installed actionmailer-1.1.3
Successfully installed actionwebservice-0.9.3
Installing RDoc documentation for rake-0.6.2...
Installing RDoc documentation for activesupport-1.2.3...
Installing RDoc documentation for activerecord-1.13.0...

lib/active_record.rb:73:64: Skipping require of dynamic string: "active_record/connection_adapters/#{adapter}_adapter"
Installing RDoc documentation for actionpack-1.11.0...

lib/action_controller/assertions.rb:4:69: Skipping require of dynamic string: "#{File.dirname(__FILE__)}/vendor/html-scanner/html/document"
Installing RDoc documentation for actionmailer-1.1.3...
Installing RDoc documentation for actionwebservice-0.9.3...


Procedemos entonces a instalar la librería FastCGI para Ruby
newton:~/rubygems-0.8.11# apt-get install libfcgi-ruby1.8

Y también el módulo para apache 1.3:
newton:~/rubygems-0.8.11# apt-get install libapache-mod-fastcgi
O para apache 2.0:
newton:~/rubygems-0.8.11# apt-get install libapache2-mod-fastcgi

En Apache 1.3, deberemos editar el /etc/apache/modules.conf, incluyendo la siguiente línea:
LoadModule fastcgi_module /usr/lib/apache/1.3/mod_fastcgi.so

En Apache 2.0, debemos crear un link simbólico de mod-available a mod-enabled, de la siguiente forma:
newton:~/rubygems-0.8.11# ln -s /etc/apache2/mods-available/fastcgi.* /etc/apache2/mods-enabled/

Podemos añadir un VirtualHost en apache para alojar nuestra aplicación RoR.
newton:~/rubygems-0.8.11# pico /etc/apache/httpd.conf

ServerName rubyonrails.gra2.com
DocumentRoot /var/www/rubyonrails/public


Una vez hecho esto y reiniciado Apache, procedemos a crear una nueva aplicación, usando el siguiente comando en el directorio que se desee:
newton:/var/www# rails rubyonrails

Por último, debemos tener en cuenta que por defecto, rails usa CGI (dispatch.cgi) y no FastCGI, así que deberemos cambiar en el directorio public/ de la aplicación, en el .htaccess el RewriteRule, buscando la línea:
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

Sustituyéndola por:
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Ruby on Rails sugiere crear 3 bases de datos para cada aplicación, una para desarrollo, otra para test y otra para producción, aunque si sólo queremos usarlo para hacer pruebas nos bastaría con una. Al parecer las identifica como *_development, *_test y *_production. Crearemos nuestra base de datos con el nombre rubyonrails.

Creamos estas 3 bases de datos en MySQL, dando permisos totales al usuario de ror:

mysql> CREATE DATABASE `rubyonrails_development` ;
mysql> CREATE DATABASE `rubyonrails_test` ;
mysql> CREATE DATABASE `rubyonrails_production` ;

mysql>
GRANT ALL on rubyonrails_development TO ror@localhost IDENTIFIED BY 'password';
mysql> GRANT ALL on rubyonrails_test TO ror@localhost IDENTIFIED BY 'password';
mysql> GRANT ALL on rubyonrails_production TO ror@localhost IDENTIFIED BY 'password';

Le indicamos a RoR la configuración de nuestras bases de datos:

newton:/var/www/rubyonrails# pico config/database.yml

development:
adapter: mysql
database: rubyonrails_development
username: ror
password: password
socket: /var/run/mysqld/mysqld.sock

test:
adapter: mysql
database: rubyonrails_test
username: ror
password: password
socket: /var/run/mysqld/mysqld.sock

production:
adapter: mysql
database: rubyonrails_production
username: ror
password: password
socket: /var/run/mysqld/mysqld.sock


Aquí finalizaría la parte *necesaria* para tener Ruby on Rails listo, a continuación
Para usarla en nuestro programa de ejemplo, crearemos la siguiente tabla:

CREATE TABLE `personas` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
`country` varchar(70) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;


Y añadimos esta entrada de ejemplo:

INSERT INTO `personas` VALUES (1, 'Daniel', 'Spain');

Creamos un Controller con 4 rutinas, list, new, view y edit.
newton:/var/www/rubyonrails# ./script/generate controller Friends list view new edit

Creamos el modelo, que representa a una tabla de una base de datos:

newton:/var/www/rubyonrails# ./script/generate model Persona

Editamos la rutina view de nuestro controlador Friends, introduciendo algo como lo siguiente:

newton:/var/www/rubyonrails# pico app/views/friends/view.rhtml
Friends#view
Esta página muestra nuestras entradas de la tabla de personas 

<%= @persona.name %>

<%= @persona.country %>


Ahora debemos indicar qué es el objeto persona, editando app/controllers/friends_controller.rb
newton:/var/www/rubyonrails# pico app/controllers/friends_controller.rb

def view
@persona = Persona.find(1)
end


Podemos visitar nuestra primera aplicación en RoR en: http://localhost/friends/view

Siento que el ejemplo sea tan malo, pero creo que os puede dar una idea sobre este lenguaje que promete muchísimo.
Intentaré (si el tiempo me lo permite), ampliar mis conocimientos en RoR y ofreceros algún otro ejemplo más significativo.



 


Trackback

Trackback URL for this entry:
http://www.gra2.com/trackback.php/instalar-ruby-on-rails

Here's what others have to say about 'Instalar Ruby on Rails en Linux':

Mas que mil Lobos &raquo; Don&#8217;t repeat yourself (DRY)
Tracked on Tuesday, July 04 2006 @ 09:41 AM CEST

Comments

Post a comment

Por cierto, si queréis usar FastCGI para que Ruby on Rails funcione mucho más rápido, debeis poner las siguientes líneas en /etc/apache/httpd.conf :

AddHandler fastcgi-script .fcgi
FastCgiIpcDir /tmp/fcgi_ipc/

Por alguna razón, no funciona incluyéndolas en el .htaccess de la aplicación RoR.


---
And love, is not the easy thing, the only baggage you can bring, is all
that you can't leave behind.
- Bono, The Edge, Adam Clayton and Larry Mullen

daniel on Sunday, December 25 2005 @ 07:47 PM CET Reply | #

donde dice:
newton:~# apt-get install rails libapache-mod-ruby
deberia decir:
ewton:~# apt-get install ruby libapache-mod-ruby

verdad?

Anonymous on Sunday, March 05 2006 @ 07:41 AM CET Reply | #

Sí y no. De hecho debes instalar ambos paquetes, ruby y rails, pero como ruby es una dependencia de rails, al
instalar rails también instala ruby, por eso no lo he puesto.

---
http://www.gra2.com

daniel on Sunday, March 05 2006 @ 08:24 AM CET Reply | #

hola, que tal el tutorial todo bien, tan solo que tuve que hacer gem update --system para que me anden los scripts, pero luego no me anda si pongo
http://localhost/friends/view me tira que no encuentra la pagina, yo nose si sera por el apache, porque en la parte de servername y document root puse tan solamente lo que deecia en el tutorial, nose si habia que agregar algo mas, ahora si pongo http://localhost/rubyonrails/public/ ahi si andaa la pagina pero no puedo ver el modelado.Bueno, eso es lo que me pasa, nose si falta algo mas de informacion para darle!!

saludos

Anonymous on Thursday, August 16 2007 @ 12:38 AM CEST Reply | #