Para empezar, te conviene abstraer el proceso en algun objeto de manera que en 
tu controller no tengas tanto codigo. Algo como:

class      ProcesosController < ApplicationController
def create
  @proceso =      ProcesoCompleto.new(params[:proceso])
end
end

Un pequeño tip: No hace falta que definas tu estructura cada vez. Saca la 
definicion del struct fuera de la clase:

Struct.new "Estructura", :buque, :matricula,      :fecha, :latitud, 
 :longitud,:rumbo, :vel, :emp, :tipo, :inm, :dnid,      :mem,:mmsi, :mdn

Struct::Estructura.new (quizas quieras darle un nombre menos generico)

Para correr algo en "background" necesitas algo como backgrounddrb. El tema es 
que si estas en windows por ahora no te va a funcionar (me conto un pajarito 
que quizas dentro de poco haya soporte de backgroundrb para windows ;)

Por lo pronto te recomiendo hacer un task y correrlo desde el root de tu 
aplicacion.

rake mis_procesos:mi_tarea Parametro1=LALALA Parametro2=123 Etc...

Si te interesa este approach, incluso lo podes programar con el task scehduler 
de windows o algun otro programa. Las tasks son simples script de rake que se 
tiran en el directorio lib/task/tarea.rake. Ejemplo:

lib/tasks/USERS.rake

namespace :users do
  desc "Crear usuario admin, contraseña admin"
  task(:admin => :environment) do  # << linea fundamental, levanta el ambiente 
rails
      
       #Aca podes abrir un archivo o hacer lo-que-se-te-cante  
       # Yo solo creo el administrator de mi tabla user, por darte un ejemplo.

        User.create :login => 'admin',
                    :password => 'admin', 
                    :password_confirmation => 'admin', 
                    :email => '[EMAIL PROTECTED]',
                    :is_admin => true

  end
 end

Ahora, desde el root de la app, hago rake users:admin y se ejecuta el codigo en 
cuestion.

Fernando Castañeda <[EMAIL PROTECTED]> escribió:       Gracias Emmanuel intuia 
que venia por ahi pero no  sabia como implementarlo o pensaba que ya estaba 
realizado.
 En cuanto a procesar un archivo de texto por una  action de  un controller lo 
arme asi ya  que se realizan tres procesos diarios solamente de estos archivos 
de  texto
 dentro de una intranet. Cada archiv de texto tiene  entre 1000-2000 que 
representan movimientos de buques que marcan su posicion  cada 4 hs, mas o 
menos.
 Como se podria realizar esta tarea en un background  sin que el usuario tenga 
que esperar el request de que se grabo todo  exitosamente ?
  Como controlaria el proceso si no se realiza  de esa manera ?
  
 Gracias nuevamente por tu  colaboracion!
  
    ----- Original Message ----- 
   From:    Emmanuel Oga 
   To: Grupo Ruby Argentina 
   Sent: Wednesday, October 17, 2007 9:19    AM
   Subject: Re: [RubyArg] Struct como    parametro en el initialize de un objeto
   

Lo que necesitas es el metodo "to_hash" en tu struct. Por    desgracia, Struct 
no trae tal metodo. Sin embargo, es bastante facil de    agregar:

Struct.new "Hola", :a, :b

a= Struct::Hola.new 1,    2

class Struct::Hola
  def to_hash
       members.inject({}) do |hsh, member|
         hsh[member]= self.send(member); hsh
    end
     end
end

a                       # => #<struct Struct::Hola a=1,    b=2>
a.to_hash       # => {"a"=>1,    "b"=>2}

Ahora podes hacer:

DerivadoDeActiveRecord.new    a.to_hash

P.D.: No te recomiendo procesar un archivo de texto en una    action de un 
controller.... te imaginas al usuario haciendo click y teniendo    que esperar 
10 segundos a que le devuelva el request? Ahora imaginate a 5 o 6    usurios al 
mismo tiempo haciendo lo mismo....

Fernando Castañeda    <[EMAIL PROTECTED]> escribió:   Hola      Lista :

Como se inicializa un objeto (ActiveRecord) con los elementos      de un struct 
que le pasa como parametro.
En la definicion de los      elementos del struct son los mismos que los 
atributos de la clase y      tabla que mapea, pero se puede mapear cada 
elemento 
del
struct contra      los atributos del objeto automaticamente, sin tener que 
definir un      initialize en la clase y mapear a mano cada atributo ?
Ej. de codigo      :
(Es un tipo encabezado-detalle) (Proceso-Movimiento)

class      ProcesosController < ApplicationController
def create
@proceso =      Proceso.new(params[:proceso])
estructura = Struct.new(:buque, :matricula,      :fecha, :latitud, 
:longitud,:rumbo, :vel, :emp, :tipo, :inm, :dnid,      :mem,:mmsi, :mdn )
registros = File.open(@proceso.filename).map {|linea|      if linea.length >= 
106 
then estructura.new(linea[0..30].strip,      *linea[31..-1].split) end}
registros.each{|x| self.armar_movimiento(x)      }
end
end


def armar_movimiento(x)
# X tiene la sig. info      => matricula="1200788",buque="San Marcos I", 
"fecha="051213",      latitud="4244.163S", longitud="06501.443W", rumbo="348", 
vel="00.0",      emp="0932", tipo="010", inm="G", dnid="470181355", 
mem="00804",      
mmsi="028", mdn="701000925",      termid=nil>
movi=Movimiento.new(params[:x])
#aca quisiera que la      estruct del struct se mapee automaticamente
#con la estructur del objeto      ya que son componetens se llaman iguales


@proceso.movimientos      << movi


end



Muchas gracias y espero que se      haya entendido



Fernando      Castañeda



_______________________________________________
Ruby      mailing      list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

      

---------------------------------
   
Yahoo! Noticias
Leé la columna de "El Chavo"    Fucks y encontrá una visión distinta de las 
Elecciones Presidenciales    2007.
http://ar.news.yahoo.com/elecciones2007/opinion/1979/pinginos-empetrolados      
  

---------------------------------
    
_______________________________________________
Ruby mailing    list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar


       
---------------------------------

Yahoo! Noticias
Leé la columna de "El Chavo" Fucks y encontrá una visión distinta de las 
Elecciones Presidenciales 2007.
 http://ar.news.yahoo.com/elecciones2007/opinion/1979/pinginos-empetrolados 
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a