Carolina y yo presentaremos nuestro caso de estudio Rails en una microempresa en la Conferencia Rails de este año.
Hablaremos de cómo hemos usado Rails en nuestra microempresa, por qué nos hemos decidido a usarlo y cómo lo compaginamos con otros sistemas que usamos para el desarrollo web.
Explicaremos varios de los proyectos (pequeños comparados con otros que se presentan en la conferencia) que hemos hecho en Rails y porqué Rails los ha hecho posibles en una microempresa sin capital inicial y con los recursos muy justos.
Algunos ejemplos:
- Gestores de contenidos simples pero específicos, en los que adaptar un programa libre ya existente sería más trabajo que hacerlo desde cero en Rails.
- Aplicaciones de gestión interna
- Proyectos propios sin cliente, es decir sin dinero a corto plazo.
Hasta hace poco sólo había usado rake para cosas típicas como
rake db:migrate
rake annotate_models
y otras de las que ya vienen definidas el Rails o en los plugins que instalo.
Pero para aprender a integrar los mapas de Google en el Directorio de Economía Social me hice con el libro "Beginning Google Maps Applications with Rails and Ajax" y ahí los ejemplos de geocodificación son con tareas rake, con lo que empecé a verles el enorme potencial que tienen. En la web de Railscasts hay un screencast bastante interesante sobre esto: Custom Rake Tasks.
Un ejemplo de geocodificacion de direcciones de empresas en el Directorio (fichero lib/tasks/geocode_empresas.rake):
task :geocode_empresas => :environment do
api_key=GOOGLE_MAPS_API_KEY
Empresa.find(:all).each do |empresa|
begin
if empresa.geocode_status == nil
empresa.geocode
puts "Empresa: #{empresa.nombre}"
puts "Dirección: #{empresa.direccion_completa}"
puts "geocode_status: #{empresa.geocode_status}"
puts "—"
end
rescue Exception => e
puts "Empresa: #{empresa.nombre}"
puts "Dirección: #{empresa.direccion_completa}"
puts "—Excepción—"
puts e
end
end # end each store
end # end rake task
Como es algo que puede tardar y no quería dejar al usuario esperando a que geocodificase su dirección al guardar la ficha de empresa, es algo que se hace desde la tarea rake, ya sea desde cron o línea de comnados en cualquier momento con:
rake geocode_empresas
+ leer más
Ya somos tres :)
Esto se va a llenar de aventuras raileras de un momento a otro ;)
A partir de hoy comparto blog con Manu, que escribirá también por aquí sus aventuras raileras.
Sólo nos falta liar a Carolina para que escriba algo también, a ver si se anima ;)
El buscador de subvenciones que comentaba en el post anterior ya está funcionando :)
BuscaBoe es un robot web desarrollado con Ruby on Rails que se lee el sumario del BOE todas las mañanas y recoge las entradas que contienen “ayuda” o “subvención”. También ofrece la posiblidad de buscar entre las entradas recogidas.
El otro día estuve con Carolina, añadiendole un buscador, para poder buscar dentro de las entradas recogidas por el robot.
Ahora le falta un poco de rodaje e ir corrigiendo los fallos que puedan surgir, bueno, y puede que algún cambio de diseño.
Como la cosa emprezó con un script ruby solitario que se ejecutaba con cron todas las mañanas, y todavía no había conseguido que me funcionasen ni Hpricot ni scRUBYt, para leer la pagina del sumario del BOE usa open-uri, y con una expresión regular que saqué a base de prueba y error, busca todas las entradas (h3 en el html) que contienen "ayuda" o subvención".
Al convertir el script en aplicación Rails, aproveché para leer el enlace correspondiente con Hpricot y sacar la sección a la que pertenece.
En estos días he estado convirtiendo en aplicación rails un pequeño script en ruby que tenía para mirar el boe todas las mañanas y buscar ayudas y subvenciones.
Al hacer la aplicación rails, instalé el plugin l10n_simplified. Como en el plugin se redefinen cosas como los mensajes de error, el formato de las fechas y demás, yo me lancé a ponerlo un poco más a mi gusto y en esas modifiqué el formato de fecha default, para ponerlo en el orden habitual por estos lares, que es dia-mes-año, sin darme cuenta que con eso la estaba liando.
En la aplicación tengo algo como:
fecha = Date.today
...
# leer la pagina del boe de hoy y buscar las entradas que contengan 'ayuda' o 'subvención'
...
Entrada.create(:fecha => fecha, :numero_boe => numero, :texto => texto, :enlace => enlace, :seccion => seccion, :subseccion => subseccion)
Eso que en princpio tendría que funcionar sin problema, mezclado con mi modificación del l10n_simplified hace un estropicio. Lo malo es que no salta ningún error, simplemente se generan fechas no válidas, del tipo 0000-00-00, con lo que te encuentras con una base de datos llena de datos inválidos.
El problema se debe a que al hacer una asignación de la fecha así, se usa el método to_s del objeto Date y como el plugin lo modifica pues se generan cadenas no válidas. Si se hace la asiganción de las fechas con los datos procedentes de un formulario que rellena el usuario no hay problema.
Después de estar un buen rato googleando y volviendome loca, he desintalado el plugin, porque en realidad no lo estaba usando en esta aplicación, y todo va como la seda, ya no tengo un montón de entradas perdidas en el tiempo :)
Podeis ver el resultado en http://buscaboe.dabne.net.
Hace tiempo que descubrí Hpricot y me pareció una librería muy útil e interesante, pero al intentar probar el ejemplo de la página principal siempre me daba error. Dentro de una aplicación Rails funcionaba, pero si intentaba ejecutar el ejemplo desde la línea de comandos me daba este error:
./hpricot.rb:8: undefined method `Hpricot' for main:Object (NoMethodError)
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
from hpricot.rb:5
Probé mil y una maneras de poner los requires y nada, pues al final ayer, no se por qué, se me ocurrió ponerlo así:
require 'rubygems'
require 'open-uri'
gem 'hpricot'
require 'hpricot'
y ¡tachán! funcionó.
Esta mañana me ha llegado un email de SitePoint anunciando que durante 60 días ofrecen la descarga gratuita de su libro "Build Your Own Ruby on Rails Web Applications" escrito por Patrick Lenz.
Yo ya me he bajado mi copia ¿y tú?