Laburo España: 250.000 ofertas de empleo
Logotipo del weblog

 


Reflexiones desde el sillón

Empezando con Ruby on Rails

11, 16 de 2005-12-16 de 2005
Mis primeras peripecias con este entorno de programación para la web

Instalando Instantrails

No tiene ningún secreto, se descomprime el archivo y se siguen los pasos que aparecen en el fichero readme.txt.

Esta aplicación nos instala:

  • Servidor Apache
  • Mysql
  • Ruby
  • Rails
  • Php
  • Phpmyadmin
  • Editores de texto y otras aplicaciones

La instalación se ha hecho en Windows XP.

Mi primera aplicación con RoR

He tratado de realizar mi primera aplicación con Ruby on rails siguiendo este pequeño tutorial de Wiki Ruby on rails.

Paso 0

Arrancamos "Instant rails".

Aspecto que presenta Instantrails

Paso 1: creación de la base de datos

Creamos una base de datos con el nombre rails_production y la poblamos con datos. Para ello arrancamos el DOS y nos vamos

a ruby/Instantrails/mysql/bin y ejecutamos

mysql -u root

create database rails_production

Cargamos una tabla y los datos que tenemos en un fichero llamado "people.sql" que contendrá lo siguiente:

#

# Database : `rails_production`
#
# --------------------------------------------------------
#
# Note: ActiveRecord will correctly map the Person class to
# this table. If you're curious about how it's done
# see the Inflector module (specifically the methods
# tableize and pluralize)
#
# Table structure for table `people`
#

CREATE TABLE `people` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
`street1` varchar(70) NOT NULL default '',
`street2` varchar(70) NOT NULL default '',
`city` varchar(70) NOT NULL default '',
`state` char(2) NOT NULL default '',
`zip` varchar(10) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

#
# Dumping data for table `people`
#

INSERT INTO `people` VALUES (1, 'Superman', '123 Somewhere', '', 'Smallville', 'KS', '123456');

Mediante mysql -u root rails_production < people.sql

Todo ha ido bien.

Paso 2: creación de la aplicación Rails

Creamos la app en rails. Para ello nos vamos en el DOS al directorio InstantRails/rails_apps y escribimos:

rails nombre de la aplicación, en nuestro caso rails friends

Automáticamente se nos crean un montón de directorios y sus correspondientes archivos.

Comprobamos el archivo de configuración llamado database.yml que se encuentra en InstantRails/rails_apps/friends/config

No he tenido que hacer nada.

Paso 3: creación de controladores

Creamos los controladores desde InstantRails/rails_apps/friends ejecutando ruby script/generate controller Friends list view new edit. Vaya no funciona.

Tras darle muchas vueltas, resulta que tenía que ejecutar el intérprete de Ruby, que no estaba en funcionamiento. Esto lo he hecho desde InstantRails/ruby/bin/ruby.exe.

Se nos generan unos cuantos archivos. Más tarde investigaremos.

Se ha creado un controlador, friends_controller.rb, con 4 rutinas:

  • view
  • list
  • new
  • edit

Paso 4: creación de un nuevo modelo

Creamos un modelo llamado person: ruby script/generate model Person

Paso 5: test rake

Desde la raíz de nuestro apps, ejecutamos rake. Se hace un test. A mi me dan 2 errores. Como no se de que van sigo adelante, ya saldrán por algún lado.

Paso 6: desarrollar la aplicación en rails

Editamos el fichero view.rhtml:

InstantRails/rails_apps/friends/app/views/friends/view.rhtml

Sustituyendo su contenido por

<html>
<body>
<h1>Friends#view</h1>
<p>This page will display one friend</p>
<p>
<%= @person.name %><br />
<%= @person.street1 %><br />
<%= @person.street2 %><br />
<%= @person.city %><br />
<%= @person.state %><br />
<%= @person.zip %>
</p>
</body>
</html>

Como podemos comprobar se trata de una especie de plantilla en la que se mezcla html y contenido dinámico. El contenido dinámico es un objeto llamado @person. El objeto necesita ser creado por un controlador de objetos que se encuentra en InstantRails/rails_apps/friends /app/controllers/friends_controller.rb. En este fichero se encuentran ya creados los métodos list, view, new y edit. Modificamos el método view que quedará como sigue:

def view
@person = Person.find(1)
end

Ahora echamos un vistazo a la clase modelo que se encuentra en InstantRails/rails_apps/friends/app/models/person.rb y que tendrá el siguiente aspecto:

class Person < ActiveRecord::Base
end

Ahora, en teoría, ya debemos poder acceder a la aplicación. Para ello arrancamos el gestor de aplicaciones, escogemos la aplicación friends y arrancamos el servidor SCGI.

Yo comienzo probando con la siguiente dirección:

http://localhost/friends/view

Parece que no funciona. Me voy al fichero de configuración de apache httpd.conf y cambiamos los datos del virtualhost llamado www.mycookbook.com y le llamo www.agustinroca.es. Los datos del virtualhost quedan así:

<VirtualHost *>
ServerName www.agustinroca.es
# handle all requests through SCGI
SCGIMount / 127.0.0.1:9999
DocumentRoot D:/ruby/InstantRails/rails_apps/friends/app/views
<Directory D:/ruby/InstantRails/rails_apps/friends/app/views>
Options +FollowSymLinks
Order allow,deny
allow from all
</Directory>
AddDefaultCharset utf-8
ErrorDocument 500 /500.html
ErrorDocument 404 /404.html
# matches locations with a dot following at least one more characters,
# that is, things like *.html, *.css, *.js, which should be delivered
# directly from the filesystem. Also matches the following
# subdirectories: images, javascript(s), stylesheets
<LocationMatch ^/(images|javascript|javascripts|stylesheets|[^/]+\.[^/]+$)>
# don't handle those with SCGI
SCGIHandler Off
</LocationMatch>
<LocationMatch "^/$">
# don't handle just / with SCGI
SCGIHandler Off
</LocationMatch>
</VirtualHost>

Ahora trato de acceder mediante http://www.agustinroca.es/friends/view

Algo falla. Me dice que no encuentra la base de datos friends_development. Sólo había creado una base de datos, y se llamaba rails_production. Abro el fichero database.yml y veo que se hace referencia a tres bases de datos: friends_development, friends_production y friends_test. Cambio esas referencias a rails_development, rails_production y rails_test.

Pruebo de nuevo. Sigue fallando. Ahora me dice que no encuentra la base de datos rails_development. Creo una base de datos con ese nombre y la pueblo con la tabla y los datos de people.sql (paso 2).

Pruebo de nuevo y...por fin algo. Ha recuperado el registro de la base de datos y lo muestra en el navegador.

Por Agustín Roca | # enlace | Comentarios (0) | Referencias (0) | En: Desarrollo web

Comentarios

Agregar un comentario


Recordar datos
¡Un solo click vale!
LaInformacion.com lainformacion.com - Medio Oficial de los Premios Bitacoras 2009