HowTo: Integrando Rails con apache
Publicado por blaxter - 19 Jul 2006 a las 18:20
Bueno, como dije en el anterior post, voy a explicar como integrar Rails con Apache, para que sea éste nuestro servidor Web. El servidor de Rails WEBrick (ejecutando script/server en el directorio de nuestra aplicación de Rails) cumple su función, sobre todo es útil para el desarrollo, pues muestra mucha información. Pero para un entorno real, no puede competir con un servidor web "de los de verdad" (estarÃa bien respaldar ésto con números, para otro dÃa que me aburra...). Otra opción serÃa usar Rails con lighttpd, ésto lo he visto mucho por la red, y parece dar buenos resultados, pero como Apache es mucho Apache, prefiero usarlo :P.
Seguiré desde el HowTo anterior, es decir, tenemos una aplicación básica en ~/dev/rails la cual al final de este tutorial será servida a los clientes mediante apache. Supongo que estamos usando Ubuntu Dapper, para otra distro serÃa todo perfectamente aplicable, pero habrÃa que cambiar, posiblemente, algunos de los binarios/directorios/archivos/nombres_de_paquetes por otros ligeramente diferentes. Intentaré ir explicando las cosas de la forma más generica posible... ok, entonces ¿qué necesitamos para poder servir aplicaciones RoR con apache?
- Mod_rewrite (para apache)
- Mod_fcgid (para apache)
- fcgid en nuestro sistema
- Modulo fcgid para ruby
- Configurar apache, añadiendo un virtualhost (o un Directory + Alias)
Vayamos por partes, como dijo Jack el destripador. Mod_rewrite lo tendrás casi 100% seguro, a no ser que hayas compilado apache indicandole que no quieres ese modulo. ¿Cómo sabemos que lo tenemos?
$ /usr/sbin/apache2 -l # [el binario de apache] -l
Compiled in modules:
core.c
(...)
mod_alias.c
mod_so.c
$ ls /etc/apache2/mods-enabled/ # aquà aparecerán los módulos activos
Debe de salir en uno de esos dos comandos, si lo tienes instalado de los repositorios de ubuntu, saldrá en mods-enabled ;).
Mod_fcgid para apache, ok. Instalemoslo o si eres un autentico macho ibérico que compila todo, compila tu apache con este modulo!. Para el resto de mortales, simplemente esto:
$ sudo aptitude install libapache2-mod-fcgid
$ sudo /etc/init.d/apache2 force-reload
$ more /etc/apache2/mods-enabled/fcgid.conf # ahora tendremos estos dos ficheros, este
AddHandler fcgid-script .fcgi
SocketPath /var/lib/apache2/fcgid/sock
$ more /etc/apache2/mods-enabled/fcgid.load # y este!
LoadModule fcgid_module /usr/lib/apache2/modules/mod_fcgid.so
Ahora instalemos fcgi en nuestro sistema como librerÃa compartida, podemos hacer un aptitude search fcgi para ver paquetes candidatos, en el caso de Ubuntu Dapper, simplemente:
$ sudo aptitude install libfcgi0
Ahora solo nos queda por instalar el modulo fcgi para ruby, para ello hacemos un:
$ sudo aptitude install libfcgi-ruby1.8 # o la que nos corresponda
Ahora hagamos la prueba definitiva, para saber si todo va bien:
$ irb
irb(main):001:0> require 'fcgi.so'
=> true
irb(main):002:0> require 'fcgi'
=> true
Muy bien!, ya tenemos todo preparado, ahora configuremos apache!. Haré la configuración con un Virtualhost, pues lo veo más cómodo (pero se podrÃa hacer también con un "Directory" más un alias). Añadimos a la configuración de apache lo siguiente:
$ sudo vi /etc/apache2/sites-available/default # en dapper, serÃa en este fichero
ServerName rails
DocumentRoot /home/blaxter/dev/rails/public/
ErrorLog /home/blaxter/dev/rails/log/apache.log
Options ExecCGI +FollowSymLinks
AllowOverride all
Allow from all
Order allow,deny
$ sudo vi /etc/hosts # añadimos un linea como esto:
127.0.0.1 rails
$ sudo /etc/init.d/apache2 force-reload # reiniciamos apache
Debes cambiar /home/blaxter/dev/rails por la ruta de tu aplicación rails!.
Ahora debemos hacer un par de cosas antes de dejar todo listo. Primero borrar las sesiones actuales
$ cd ~/dev/rails # dir de nuestra aplicación
$ rm tmp/sessions/* # es importante hacer esto, hazlo!
luego permitir al servidor leer y escribir en nuestra aplicación, Apache corre como usuario www-data, una forma de permitirle leer los archivos y escribir (concretamente debe escribir en ./tmp/*), serÃa poner el proyecto con nombre de usuario www-data y luego añadirnos a nosotros como miembro de www-data, esta es una opción, puede haber cientas, dependiendo del sistema de cada uno...
$ chown www-data:www-data -R . # apache corre como usuario www-data
$ sudo vigr # modificamos la linea de www-data, si tenÃamos algo como esto:
www-data:x:33:
la modificamos a algo como esto:
www-data:x:33:blaxter
Ahora, ya para finalizar, solo nos queda modificar el .htaccess, concretamente ~/dev/rails/public/.htaccess, que debe quedar asÃ:
Options +FollowSymLinks +ExecCGI
RewriteEngine On
#####################################
# Si configuramos la aplicacion con un Directory mas un alias tipo
# Alias /rails /home/blaxter/dev/rails/public
# DeberÃamos descomentar la siguiente linea
# RewriteBase /rails
#####################################
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]ErrorDocument 500 "Application error. Rails application failed to start properly"
Ok, todo hecho. Ya solo queda entrar a http://rails/ o http://rails/adminDeCosas o http://rails/prueba y todo funcionará!. Además podremos ver el log en ~/dev/rails/log/apache.log :). Suerte!
HowTo: Robar bicis
Publicado por blaxter - 17 Jul 2006 a las 14:44Concretamente serÃa robar bicis en Nueva York, aunque posiblemente se podrá extrapolar a cualquier otra ciudad de tamaño medio-grande. Curioso el video, sobre todo al final
HowTo: Instalando unos buenos Railes [RoR]
Publicado por blaxter - 15 Jul 2006 a las 17:12
Ruby es un lenguaje de script similar a python, que aunque no era muy conocido anteriormente (antes de RoR), gracias al framework RoR, está creciendo en popularidad a pasos agigantados y además por méritos propios.
El framework Rails se basa en el patrón de diseño MVC (model view controller). Igual otro dÃa explico en detalle este patrón, pues es muy interesante. Ahora vayamos con la instalación de Rails, que es de lo que se trata en este post.
PodrÃamos hacer la instalación con un simple $ sudo aptitude install rails, pero es mejor instalarlo mediante Gem, un gestor de paquetes para ruby (algo asà como PEAR para php o cpan.org para perl, o el propio apt-get para Debian)
Supongo que tenemos instalada una base de datos, por ejemplo MySQL, y repositorios universe de Ubuntu dapper (para otras distros se podrÃan aplicar todos los pasos, realizando, quizás, ciertas modificaciones...). Primero instalaremos Ruby y unos paquetes adicionales necesarios para el correcto funcionamiento de Gem
$ sudo aptitude install ruby irb rdoc libzlib-ruby libyaml-ruby liberb-ruby rdoc libdrb-ruby libyaml-ruby libzlib-ruby
irb es un entorno de ejecución interactivo de ruby, podemos ejecutarlo y hacer un hola mundo xD
$ irb
irb(main):001:0> print "hola mundo!"
hola mundo!=> nil
innncreible xD. Ahora instalemos Gem
$ cd /tmp && wget http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz
$ tar xfz rubygems-0.8.11.tgz
$ cd rubygems-0.8.11/
$ sudo ruby setup.rb
Ok, ya lo tenemos instalado, para información de como funciona, ver aquÃ. Ahora para instalar rails solo tenemos que hacer:
$ sudo gem install rails --include-dependencies
Ya está!, tenemos Ruby On Rails instalado! Mooola. Vale, pero y ahora que hago?. Vamos a hacer un par de pruebas para ver que realmente funciona todo bien.
Suponemos que nuestro directorio de trabajo será ~/dev/rails, por ejemplo:
$ cd ~/dev
$ rails rails # el parametro es el nombre de la carpeta que creará
$ cd rails
$ script/server
Ok, ahora si entramos en http://localhost:3000/ veremos la pantalla de bienvenida de Rails. Vale, funcionar, funciona, o algo sale. Pero como pongo hago yo cosas?, eh?, eh?. Vamos a hacer un hola mundo!.
Paramos el servidor (ctrl+c) y ejecutamos
$ script/generate controller prueba
$ vim app/controllers/prueba_controller.rb # lo modificamos tal que asi:
$ more app/controllers/prueba_controller.rb
class PruebaController < ApplicationController
def index
render_text "hola mundo!"
end
def lalala
render_text "como mola esto nano!"
end
end
$ script/server
Y al entrar a http://localhost:3000/prueba veremos nuestro gran hola mundo! :). Y entrando a http://localhost:3000/prueba/lalala verÃamos el otro texto que hemos escrito. Inncreible xD.
Vale, ya hemos hecho una tonterÃa, hagamos otra más cool. Al inicio de este coñazo HowTo dije que suponÃa que tenÃamos instalada MySQL (u otra BD). Instalemos soporte para ruby para nuestra base de datos
$ sudo aptitude install libmysql-ruby1.8 # o el equivalente para nuestra BD!
$ irb
irb(main):001:0> require "mysql"
=> true
irb(main):002:0> exit
Creamos un par de bases de datos y por temas de seguridad también serÃa aconsejable crear un usuario con permisos más restrictivo, usaré "root" por simplificar este howto
$ sudo mysql -u root -p
mysql> create DATABASE rails;
mysql> create DATABASE rails_test;
mysql> quit
Ahora vamos a decir a Rails cual es nuestra base de datos, editamos ~/dev/rails/config/database.yml quedando algo como esto:
$ more config/database.yml
development:
adapter: mysql
database: rails
username: root
password: NUESTRAPASS
host: localhosttest:
adapter: mysql
database: rails_test
username: root
password: NUESTRAPASS
host: localhostproduction:
adapter: mysql
database: rails
username: root
password: NUESTRAPASS
host: localhost
Vale, todo perfecto. Ahora hagamos lo siguiente:
$ script/generate model Thing
$ vim db/migrate/001_create_things.rb
algo como esto (por ejemplo...):
class CreateThings < ActiveRecord::Migration
def self.up
create_table :things do |t|
t.column :nombre, :string
t.column :uso, :string
t.column :cantidad, :integer
end
enddef self.down
drop_table :things
end
end
$ rake db:migrate
$ script/generate scaffold Thing AdminDeCosas
$ script/server
Ahora entrando a http://localhost:3000/AdminDeCosas podremos añadir entradas de "cosas", verlas, editarlas y borrarlas. Curioso, eh?
Para próximos posibles post me apunto integrarlo con apache y profundizar más en las posibilidades de Rails. Para cualquier duda, crÃtica, opinión, insulto o desvario mental, los comentarios ;).
iStone de Apple
Publicado por blaxter - 14 Jul 2006 a las 11:56Nuevo producto de Apple, iStone!, una piedra!. Todo lo que estábamos deseando, podrás pagar 99$ (80� aprox.) para poder hacerte con una inservible y fashion piedra. Eso si, tiene el logo de Apple en ella!
Es una broma, por si hay algún despistado...(visto en applesfera)
Objetivos para el verano
Publicado por blaxter - 13 Jul 2006 a las 19:56Aunque llevo ya una semana, he ido pensando cosicas para hacer, es todo muy generico pero ahà va mi lista. Al final del verano la revisaré a ver que es lo que he cumplido y el qué no
- Carnet de conducir teórico: que ya va siendo hora! el plan es ir al primer examen que haya de septiembre
- Tocar en profundidad Ruby on Rails: de momento he hecho el hola mundo xD
- Estudiar ingles de una puta vez: que esto si que va siendo ya hora! (fijo que no lo hago, pero bueno, ahà queda la intención...)
- Convertir mi par de scripts para convertir música en programa con GUI: he estado mirando glade+c#, perl+gtk, librerÃas id3 para c#..., mucho mirar, pero poca acción de momento...
- Estudiar: que no se me olvide!, tengo tres para septiembre :P. Administración de empresas, Inglés técnico (que triste soy xD, suspendo las faciles :P) e IngenierÃa del software II (me suspendieron injustamente, lo repito y lo volveré a repetir mientras tenga habla ¬¬).
- Ver series como un poseso: jaja, claramente xD, ahora mismo estoy viendo Invasion, pero también tengo por ver, Super Natural, Numb3rs, Six feet under, Buffy, Hex, Ghost whisperer, y una lista como para estar viendo series durante veinte veranos xD
- Ganar la liga del Virtuamanager!: Esto lo añado a la lista por sugerencia de un ser muy peculiar de este planeta llamado por sus semejantes como "puto", linkarÃa a su blog pero va a ser que no tiene, y como no le gusta leer blogs, puedo decir que es un paquete como manager, y aún más apostando! xD. (por cierto, si alguien quiere jugar al juego, y quiere entrar en una liga, que lo diga y le digo los códigos de mi liga ;), no hace falta conocimientos de futbol, es mas, yo no tengo ni zorra xD)
- Buscar novia: jaja, esto lo añado por sugerencia de Josepul, no le veo yo muchas opciones de éxito a este punto, pero ahà lo dejo puesto xD.
Ahora de momento me voy a ver el último de The 4400, que hace mucho calor como para pensar.
De la rosa sustituye a Montoya!
Publicado por blaxter - 11 Jul 2006 a las 11:38
Confirmado!, hace dos dÃas Montoya anunció que la próxima temporada iba a dejar la Formula 1 para correr en la Nascar por motivos personales (decÃa que se divertÃa más en la Nascar y, aunque ganase mucho menos dinero, preferÃa ser feliz al dinero...), el hecho de que lo haya anunciado implica incumplir una de las clausulas de su contrato (no anunciar su marcha antes de fin de contrato). Debido a ésto (y a las últimas actuaciones, un tanto pobres y llenas de fallos, de Montoya), la escuderÃa ha decidido poner en su puesto a Pedro De la Rosa, un magnifico piloto que demosotro la pasada temporada en el GP de Bahrain lo que puede llegar a conseguir.
La parte negativa al asunto, es que, aunque Pedro De la Rosa correrá lo que queda de temporada, para el próximo año, Mclaren-Mercedes ya tiene primer piloto (el feo del Fernando Alonso) y segundo piloto (Lewis Hamilton) :(.
Al menos podremos ver de nuevo en acción a Pedro, seguro que nos brindará con carreras tan tremendas como Bahrain 2005.
Esta obra está bajo una
licencia de Creative Commons.
Este blog funciona gracias a WordPress
con el theme GimpStyle
diseñado por Horacio Bella y adaptado por un servidor.
Feed entradas
