2010-01-25 19 views
21

La aplicación My rails se ejecuta en una máquina del servidor Ubuntu.Rieles: creación de archivos temporales de forma portátil

Necesito crear archivos temporales con el fin de "alimentar" a una segunda aplicación, independiente (Voy a estar utilizando tareas rastrillo para esto, en caso de que esta información es necesaria)

Mi pregunta es: ¿qué ¿Es la mejor manera de crear campos temporales en una aplicación de rieles?

Como estoy en Ubuntu, podría crearlos en /tmp/whatever, pero lo que funcionaría solo en Linux.

Me gustaría que mi aplicación sea lo más portátil posible, por lo que puede instalarse en máquinas con Windows & mac, si es necesario.

¿Alguna idea?

Muchas gracias.

Respuesta

36

tmp/ es definitivamente el lugar indicado para colocar los archivos.

La mejor manera que he encontrado de crear archivos en esa carpeta es usando ruby's tempfile library.

El código es el siguiente:

require 'tempfile' 

def foo() 
    # creates a temporary file in tmp/ 
    Tempfile.open('prefix', Rails.root.join('tmp')) do |f| 
    f.print('a temp message') 
    f.flush 
    #... do more stuff with f 
    end 
end 

me gusta esta solución porque:

  • Genera nombres de archivo al azar de forma automática (se puede proporcionar un prefijo)
  • elimina automáticamente los archivos cuando ya no se usan. Por ejemplo, si se invoca en una tarea de rake, los archivos se eliminan cuando finaliza la tarea de rake.
+7

'Rails.root.join ('tmp')', not '" # {Rails.root}/tmp "'. El primero es más limpio y (probablemente) más portátil. – skalee

+0

Buen punto. Reparado, gracias! – kikito

+0

Genial, qué abstracción útil. – elsurudo

7

Las aplicaciones Rails también tienen su propio directorio tmp/. Supongo que uno siempre está disponible y, por lo tanto, es un buen candidato para usar y mantener su aplicación portátil.

Cuestiones relacionadas