2011-04-04 16 views
12

Perdón por la pregunta loca, pero ¿hay alguna forma de que mi aplicación Rails reciba una transmisión FTP?FTP ** TO ** Aplicación Rails alojada en Heroku?

Tengo una carga diaria de FTP sobre la que no tengo control, que carga varios cientos de páginas HTML a nuestro servidor existente cada día. Quiero mover este sitio a una implementación exclusiva de Rails en Heroku, pero no puedo tocar esta carga de FTP (que todavía tiene que suceder).

Dado que Heroku no ofrece espacio de almacenamiento público o FTP, no puedo cargar los archivos directamente a Heroku (y realmente no quiero). Lo que me gustaría es señalar la carga de FTP a mi aplicación Rails, y hacer que mi aplicación Rails reciba y analice los archivos HTML para extraer la información que necesito, almacenarla en la base de datos y hacer todo lo que tenga que hacer con ella . (Algo así como una acción RESTful, pero a través de FTP en lugar de cualquiera de los verbos REST estándar).

¿Es esto posible o estoy loco por pensarlo? Si es posible, ¿cómo voy a hacer esto?

Respuesta

4

Heroku no admite que su aplicación reciba FTP.

Puede escribir un complemento Heroku para recibir FTP, si realmente lo desea.

+0

Esto es lo que pensé. Ahh, bueno, voy a intentarlo. – neezer

+0

Esto no es 100% exacto. He confirmado que, en la pila de cedro celadon, puede almacenar archivos en # {Rails.root}/tmp /. Sin embargo, estos archivos solo están disponibles para el proceso que los creó. Cuando el proceso finaliza, los archivos se purgan. La respuesta de jbescoyez es la mejor respuesta. – spyderman4g63

+0

@ spyderman4g63 Mi respuesta es exactamente la pregunta. La pregunta era: "¿Hay alguna forma de que mi aplicación Rails [en Heroku] reciba una transmisión FTP?" Esta es la pregunta que respondí, y la respuesta es: no. la respuesta de jbescoyez no aborda la pregunta original como se le preguntó; más bien, ofrece una solución alternativa que funciona en este caso particular, pero no funciona en general. – yfeldblum

0

Sí, esto debería ser posible. Deberá buscar en el módulo net/ftp y comprobar cómo funciona, pero debería ser posible.

He encontrado this project que probablemente podría servir como un ejemplo.

+0

Gracias por el enlace. ¿Hay alguna complicación con Heroku y el puerto 21, o el protocolo FTP en general? No sé si Heroku bloquea esos o no ... pensamientos? – neezer

+0

Supongo que lo más fácil sería intentarlo; no creo que tengan documentación sobre eso. –

1

FTP no es compatible con los encabezados de host, por lo que tendrá problemas para obtener su solicitud en la grilla de Heroku y su aplicación, me imagino.

Me inclinaría más a obtener sus archivos en un depósito de Amazon S3 y que su aplicación obtenga los archivos de allí y los procese de esa manera, o de forma similar haga que su aplicación llegue al servidor FTP y recupere los archivos para su procesamiento de esa manera.

+0

Cabeceras de host no es el problema. De hecho, las aplicaciones de Heroku funcionan bien con SSL, donde el enrutamiento debe hacerse por dirección IP en la capa 4 en lugar de por el encabezado del host en la capa 7. – yfeldblum

17

Puede programar una tarea de rake con cron que recuperará archivos en el servidor ftp y los cargará en su db.

Así es como su archivo cron.rake debe verse como:

require 'net/ftp' 

    task :cron => :environment do 
     Dir.chdir("tmp") do 
     Net::FTP.open("ftp.example.com") do |ftp| 
      ftp.passive = true 
      ftp.login('login', 'password') 
      ftp.chdir("your_dir") 
      ftp.get("your_file") 
      # ... Load the files in the database here 
     end 
     end 
    end 

Dos cosas a tener en cuenta:

  • no se olvide de ftp.passive = true desde Heroku no soporta el modo activo.
  • Todo lo que desee hacer debe estar en la tarea de rake, ya que Heroku borrará el directorio de tmp una vez que la tarea haya terminado.
+0

Puede tener dos carpetas diferentes en el FTP, pendientes y procesadas. La aplicación de rieles podría tomar todos los archivos pendientes y moverlos a procesados ​​una vez que estén listos. – baash05

+0

Como nota al margen, creo que esto es necesario en Ubuntu en general – Nick

2

También necesito una instancia de Heroku para recibir archivos a través de FTP.

Estoy considerando usar Brick FTP.

Cuando un webhook indica que un archivo ha sido cargado, planeo descargar e importar el contenido del archivo en la base de datos.

+0

¿Algún comentario sobre eso? –

Cuestiones relacionadas