Upload en rails->merb || rails ->BackroundRb

Hola expertos,

Estoy desarrollando un proyecto en rails que va a tener mucha subida de
archivos.Ahora tengo implementado un sistema de upload con merb para
hacer
el upload handling.
Pero en este momento no se si será mejor usar rails y poner un proceso
de
backgroundRb para levantar un par de mongrel que se haga cargo de eso,
no se si sea necesario cargar otro Framework solo para subir imagenes,
o
si?

¿con Rails 2.2 se solventaria en parte el problema de locking de active
record como para usarlo tambien como framework de subida de archivos ? o
nunca tanto?

Saludos

Atte.
Miguel Michelson Martinez

Hola Miguel, si usas Nginx el tema se podria simplificar usando un
modulo
para el manejo de los uploads:

http://brainspl.at/articles/2008/07/20/nginx-upload-module

Y a solicitud del desarrollador del modulo prepare un pequeño ejemplo
hace
poco:

http://pastie.org/259947

Saludos.

Hola Rubén ,
que interesante ese modulo, yo estoy utilizando un modulo de nginx de
progress , pero me parece que no es lo mismo . voy a chekarlo mas

asi como lo veo , el modulo es para pasar el archivo a nginx y no a
rails,
no?

¿con esto se podria prescindir de la aplicacion merb para los uploads?
seria ± igual de eficiente ?

gracias

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/9/9 Ruben. D. [email protected]

2008/9/9 Miguel M. [email protected]

Hola Rubén ,
que interesante ese modulo, yo estoy utilizando un modulo de nginx de
progress , pero me parece que no es lo mismo . voy a chekarlo mas

asi como lo veo , el modulo es para pasar el archivo a nginx y no a rails,
no?

Asi es, lo que hace el modulo es parsear el contenido del request(lo
siento,
no se explicar bien esta parte) moviendo los archivos que se encuentren
en
el a un directorio que tu le especificas en la configuracion del
‘location’
y reemplaza esa parte con la metadata de dicho archivo(nombre de
archivo,
tipo, tamaño, etc) y esta metada es la que se le pasa a Rails.

¿con esto se podria prescindir de la aplicacion merb para los uploads?
seria ± igual de eficiente ?

Para responder a esta pregunta habria que hacer los benchmarks
necesarios,
los cuales no los puedo hacer en este momento por cuestion de tiempo,
pero
me da la corazonada que es mas eficiente ya que el parseo lo realiza en
C.

gracias

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

Saludos.

El 10 de septiembre de 2008 9:47, Miguel M. <
[email protected]> escribió:

Gracias Rubén ,

¿sabes si con este modulo es posible saber el estado de la carga , como
para hacer un progress bar?

No, para eso tienes otro modulo que me mencionaste en el mensaje
anterior.

www.artenlinea.cl

Un consejo hasta de un conejo: Siempre lee la documentación antes de
hacer
alguna consulta, de esta manera ahorras mucho tiempo a la persona que te
esta dando una mano evitando preguntas simples de responder.

Saludos.

Gracias Rubén ,

¿sabes si con este modulo es posible saber el estado de la carga , como
para
hacer un progress bar?

voy a implementarlo para mi app a ver como me va.

saludos

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/9/10 Ruben. D. [email protected]

Hola Rubén, estoy probando el pastie que me enviaste[1], y ya instalé el
módulo de nginx, sin embargo me aparecieron unos errores en la aplacion
rails,
primero en la linea 5 del modelo , tienes algo asi

def uploaded_data=(file_attributes)

eso esta bien? porque me tiro un error de brackets , finalmente lo dejé
asi

def uploaded_data(file_attributes)

luego, el formulario está recibiendo los parametros de uploaded_data
asi,

{“photo”=>{“uploaded_data”=>{“name”=>“Foto 13.jpg”,
“content_type”=>“image/jpeg”,
“path”=>“/tmp/0000246921”},
“title”=>“lkm”},
“commit”=>“Create”,
“authenticity_token”=>“5c3d75a0b58f4805c2c5e174e0cd4c7a75bbc7da”}

ademas veo que el archivo se decarga en el servidor en el tmp, sin
embargo
, el formulario arroja el error de validacion ya que al parecer el @file
no
existe; quitando la validacion me aparece el siguiente error

http://pastie.org/271031

alguna idea al respecto?

saludos

[1]http://pastie.org/259947

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/9/10 Ruben. D. [email protected]

Hola Miguel,

El 12 de septiembre de 2008 0:15, Miguel M. <
[email protected]> escribió:

def uploaded_data(file_attributes)

Eso esta bien, no te deberia dar error ya que estoy redefiniendo el metodo
setter, para poder coger la metadata del archivo que me es enviada por
el
modulo de nginx, si me podrias pegar el error que obtienes aqui para
poder
darme uan idea del problema.

Claro, @file es nil, nunca llega a asignarse ya que a este se le asigna
el
contenido del archivo en el metodo uploaded_data= y como has modificado
este
metodo nunca llega a producirse esa llamada, es normal.

Saludos.

2008/9/12 Miguel M. [email protected]:

def uploaded_data=(file_attributes)
eso esta bien? porque me tiro un error de brackets , finalmente lo dejé asi
Sintacticamente no està mal, de hecho estas sobreescribiendo el
“attribute_writer” ( a.k.a. “setter” ).

Hola Rubén , gracias por la ayuda,

probando nuevamente el metodo ,

def uploaded_data=(file_attributes)

ahora si funciona :P, lo unico que me queda es que la imagen se copie al
directorio de Rails, parece que tengo problemas de permisos con la
imagen,
esta queda por ej en /tmp/0000123458 , algo asi, pero me tira el
siguiente
error

Permission denied - /tmp/0000123458

aqui en detalle , http://pastie.org/271243

en mi configuración de Nginx tengo

        upload_store_access user:rw group:rw;

pero aun asi no me da el acceso para leer la imagen

gracias

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/9/12 Ruben. D. [email protected]

2008/9/12 Miguel M. [email protected]

El mismo problema tuve al hacer las pruebas, lo solucione temporalmente
dando los permisos al usuario con el que se ejecuta mongrelthin|whatever
al
directorio /tmp:

sudo chown -R rdavila:root /tmp

Digo que es una solucion temporal porque puede traer algunos problemas
en el
caso que tengas varias aplicaciones corriendo bajo distintos usuarios,
lamentablemente no tengo ahorita el ejemplo en mano para cacharrear.

Saludos.

exelente , ahi funcionó.

Gracias!

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/9/12 Ruben. D. [email protected]