attachment_fu s3 uploads with backgroundjob

Publicado por jorge

Thanks to Jon Guymon for his article bj-makes-attachment_fu-happy that really help me solve a problem I was having with mongrel.

Attachment_fu + s3 sometimes do very weird things that makes mongrel to freeze. After a lot of googling I realize that the best solution to avoid problems was to do the uploads to S3 in a background proccess apart from mongrel.

I started with Jon Guymon approach and it worked well but i needed to create thumbnails and the local files to be deleted after the uploading to S3 was finished.

Just changing the part of attachment_fu that actually uploads the file to S3 do the trick.

Open vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/s3_backend.rb and change the method save_to_storage to background the uploads.

This is the original method:

def save_to_storage
   if save_attachment?
     S3Object.store(
     full_filename,
     (temp_path ? File.open(temp_path) : temp_data),
     bucket_name,
     :content_type => content_type,
     :access => attachment_options[:s3_access]
     )
     @old_filename = nil
     true
   end
end

In my version I copy the file to a temporary directory in tmp/s3uploads (just to make sure the file does not disappear) then I add the upload task to the background queue

def save_to_storage
   if save_attachment?
    my_temp_file = RAILS_ROOT+'/tmp/s3uploading/'+"#{rand Time.now.to_i}#{filename || 'attachment'}"

     if temp_path
     File.open(my_temp_file,"w+") do |tmp|
     tmp.close
     FileUtils.cp temp_path, tmp.path
     end
     else
     File.open(my_temp_file, "w+") do |tmp|
     tmp.binmode
     tmp.write temp_data
     tmp.close
     end
     fichero = RAILS_ROOT+'/tmp/s3uploading/' + "#{rand Time.now.to_i}#{filename || 'attachment'}"
     end
    
     Bj.submit("./script/runner ./jobs/s3_uploader.rb " +
     full_filename + " " +
     my_temp_file + " " +
     bucket_name + " " +
     content_type + " " +
     attachment_options[:s3_access].to_s
     )
     end

     @old_filename = nil
     true
  end
end

This way attachment_fu will spawn a task for every file it creates.

Now edit the file Jon Guymon created to handle the upload (jobs/s3_uploader.rb)

This is how my file looks like

Base.establish_connection!(:access_key_id => ACCESS_KEY,
:secret_access_key => SECRET_KEY)

S3Object.store(ARGV[0],
File.open(ARGV[1]),
ARGV[2],
:content_type => ARGV[3],
:access => ARGV[4]
)

File.delete(ARGV[1])

A simple upload to S3 and after finishing it I delete the temporary file created in tmp/s3uploads/

So far mongrel is doing its job with no more hangs and as a side effect users can uploads their files faster.

There are a lot of pages about backgrounding tasks and a good recipe in Rails recipes 2

Si la montaña no viene a Mahoma 2

Publicado por jorge

La función rand que incluye Firebird no funciona del todo bien y me devuelve resultados que distan mucho de ser aleatorios por lo que para ordenar los resultados de una consulta no me sirve:

select * from tabla order by rand()

Solución: dejar que la base de datos haga lo que mejor sabe hacer, devolver registros en el menor tiempo posible y emplear ruby para el orden.

resultados = find(:all, :limit => 10)
resultados.sort_by { rand }

ruby on rails firebird y problemas con insert

Publicado por jorge

He descargado la última versión del firebird-adapter desde gems.rubyonrails.org y cuando voy a insertar un registro me da un error diciendo que "insert is an abstract method".

Trasteando he visto que active-record-firebird-adapter-1.0.0 no tiene definido el método insert y lógicamente al heredar de abstract-record que si lo tiene pues se queja.

Realmente no se si es correcto que esto sea así pero yo lo he añadido de la siguiente forma:

def insert(sql, name = nil, pk = nil, id_value = nill, sequence_name = nill)
execute sql, name
end

Desde entonces los insert funcionan correctamente.

No estoy seguro al 100% de que esta forma sea la correcta y además me parece muy sospechoso que se hayan olvidado del método insert.. pero lo que es seguro es que haciendo esto todo funciona.

Si alguien tiene una explicación mejor que me la diga.

Herramienta de colaboración

Publicado por jorge

Ya está terminado el desarrollo de la primera versión de nuestra herramienta de colaboración.

Por lo tanto ahora abrimos un periodo en el que aquellos interesados en probarla pueden enviarnos su email e iremos dando accesos a la aplicación.

El lanzamiento definitivo está previsto para el 1 de Diciembre de 2007 así que permaneced atentos a las novedades.

Para los que no la conocen os contamos que esta aplicación está pensada para aquellas empresas/personas que necesitan compartir información y/o ficheros con diversa gente dispersa geográficamente.

La aplicación se compone de cuatro herramientas:

  • Mensajería
  • Gestión de proyectos
  • Almacenamiento de ficheros
  • Envíos de emails con adjuntos voluminosos

Nuevo servicio a inmobiliarias

Publicado por jorge

Hemos lanzado un nuevo servicio destinado a agencias inmobiliarias y promotoras. Se llama Oficinainmobiliaria.es y les ofrece la posibilidad de crear y personalizar su propia página web de forma gratuita.

Todos los portales inmobiliarios (cada semana aparece uno nuevo) buscan inmobiliarias que quieran pagar por publicar inmuebles en su portal. Nosotros ofrecemos algo totalmente distinto:
Crear su propia web, con su propio buscador y publicar ilimitados inmuebles tanto de segunda mano como de obra nueva. Personalizar la apariencia de su web, los textos y las fotografías. Y todo ello gratis.

Tal y como está el mercado inmobiliario parece que vamos a contracorriente aunque estamos convencidos de que nuestra propuesta tiene mucho sentido.
En breve vamos a lanzar una versión mejorada de Oficinainmobiliaria.es, con nuevas características y utilidades y que tendrá un coste mensual.
Si la gente emplea nuestra versión gratuíta y le funciona, le es útil y cubre sus necesidades es muy probable que también le interesen nuestras opciones adicionales a cambio de una pequeña cuota mensual. De todas formas siempre existirá la versión gratuíta y las opciones que ahora son gratís, continuarán siendolo.

Graficos, contratos, Dilbert y esfuerzo

Publicado por jorge

Un enlace a revisar con detalle: Gráficos con Prototype
Una nueva herramienta para conocer más información sobre tu dominio. Aporta información básica sobre tu dominio y como principal ventaja es el tenerla toda concentrada en un solo punto, aunque no hay nada novedoso.

En Digital web magazine hablan de la importancia de los contratos.
Particularmente bueno este Dilbert.
Una lectura interesante: Distintos niveles de esfuerzo en el marketing de una web.

Y hablando de esfuerzo, una semana intensa esta última, no paramos de desarrollar cosas nuevas. Tenemos tres nuevos proyectos a punto de ver la luz con la llegada de la primavera.
Un buscador de viviendas de obra nueva con Google Maps, un nuevo buscador inmobiliario (ya tenemos otro pero es un poco más "experimental") y nuestra aplicación de colaboración.
Después de usarla nosotros mismos y algunos de nuestros clientes durante un tiempo se está convirtiendo en una herramienta muy útil.

Recursos de diseño web, usabilidad y javascript

Publicado por jorge

Un par de enlaces de recursos útiles para diseño web:
Dar estilo a los controles de formularios y una colección de 5 enlaces sobre diseño.

Hasta las ventanas más obvias y que empleamos de forma habitual se pueden revisar y mejorar. Hoy Robert Hoekman nos enseña como mejorar la presentación de los botones OK/Cancel.

Cuando creamos una web podemos pensar en los usuarios o podemos pensar en nosotros mismos. La mayoría de veces ocurre esto último y creamos páginas web buscando el máximo de diseño y el mínimo de funcionalidad lo que las convierte en inservibles para los usuarios.. El Pioneer Theatre de Salt Lake City, piensa en sus usuarios y para facilitarles la elección de su asiento muestra la disposición de los mismos y además la vista que se tiene del escenario desde cada uno. (via 37signals)

Que viene después de la usabilidad?

Dojo GUI build tool

Microformatos, empleo, portales inmobiliarios y Bill Gates

Publicado por jorge

A través de la web de Anieto2k llego a un artículo sobre la forma de dar estilo a nuestras hcards. Las hcards son una manera de emplear los microformatos para mostrar información. Si te preguntas que son los microformatos te diré que son una manera de aprovechar el xhtml existente para proporcionar más información a los visitantes de una página web. Mediante hcards podemos mostrar información sobre personas y lugares, con hCalendar sobre eventos y citas, etc...

En 37 Signals hablan sobre contratar a teletrabajadores. Se preguntan, y con razón, porqué vas a dejar de contratar a un buen candidato solo por el hecho de que no viva en tu cuidad o no pueda venir a trabajar a tus oficinas. Para mi es una de las grandes ventajas de nuestro tipo de actividad, poder contratar a gente basándote en el talento y no en la proximidad geográfica. Nosotros tenemos gente trabajando para nosotros en San sebastián, en Holanda y en Argentina. Diferentes horarios, diferentes idiomas incluso, pero nos comunicamos de maravilla y nos funciona estupendamente.

Reportaje sobre los portales inmobiliarios en España en el blog de Jesús Encinar.

Mike Arrington de Techcrunch habla sobre un encuentro de unos pocos bloggers con Bill Gates y comenta las impresiones del (le queda poco) jefazo de Microsoft sobre el futuro del DRM (Gestor de derechos de autor). Esas protecciones que se ponen a archivos de audio y video para limitar nuestros derechos. Me gusta sobre todo el comentario de que todos los invitados al encuentro llevaban portátiles Mac.

Y para finalizar los deberes del fin de semana: Leer el artículo de Rick Olson sobre ActiveResource, ahora que Rails 1.2 está a la vuelta de la esquina.

Tractis, tipografias, rails y herramientas

Publicado por jorge

Empezamos anunciando que Tractis acaba de lanzar su versión 2.0 Beta. Por si no los conoces Tractis es un gestor de contratos bien pensado, ideado y realizado. Me gusta mucho como han desarrollado su idea de negocio. Esto me demuestra que, incluso en el complicado mundo de las aplicaciones web, si tienes un buen producto y haces las cosas bien puedes salir adelante aunque residas en España (estoy seguro que si estuvieran en EEUU ya habrían recibido fuertes inversiones).

Un tutorial para añadir fuentes tipográficas de Windows a nuestro Ubuntu

Dos plugins para Rails:
Uno para fechas que nos permite comprobar cosas como "hoy", "ayer" y "mañana".
Este plugin nos crea unas tareas rake que nos permitirán automatizar crear/borrar/backup/restaurar una base de datos mysql

.

Instalar Mongrel en Ubunto 6.06

Publicado por jorge

Instalar Mongrel en una Ubuntu 6.06 no es tan sencillo como teclear:
sudo gem install mongrel.
Si al escribir esto recibes un mensaje del tipo:
Building native extensions. This could take a while... extconf.rb:1:in `require': no such file to load -- mkmf (LoadError) from extconf.rb:1
Es que te falta el paquete ruby1.8-dev… vaya manía la de debian (y Ubuntu) de fragmentar ruby en tantos paquetes, siempre falta alguno cuando lo necesitas.
Para solucionarlo escribe esto:
sudo apt-get install ruby1.8-dev
Y a disfrutar.

Por cierto existe un artículo más completo que este mio (en inglés).

Más artículos: 1 2 3