在Heroku上托管的FTP ** TO ** Rails应用程序?

时间:2011-04-04 18:52:40

标签: ruby-on-rails-3 ftp heroku

请原谅这个棘手的问题,但无论如何让我的Rails应用程序接收FTP传输?

我每天都有无法控制的FTP上传,每天都会将数百个HTML页面上传到我们现有的服务器上。我想将这个站点移动到Heroku上的Rails-only部署,但是我无法触及这个FTP上传(仍然需要发生)。

由于Heroku不提供公共存储空间或FTP,我无法将文件直接上传到Heroku(我真的不想)。我想要的是将FTP上传指向我的Rails应用程序,并让我的Rails应用程序接收并解析HTML文件以提取我需要的信息,将其存储在数据库中,并做任何我需要做的事情。 (有点像RESTful动作,但通过FTP而不是任何标准REST动词)。

这是完全可能的还是我因为思考而疯狂?如果有可能,我该怎么做呢?

5 个答案:

答案 0 :(得分:17)

您可以使用cron安排rake任务,该任务将检索ftp服务器上的文件并将其上传到您的数据库中。

以下是您的cron.rake文件的外观:

    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

要记住两件事:

  • 不要忘记ftp.passive = true,因为Heroku不支持活动模式。
  • 你想做的一切都应该包含在rake任务中,因为Heroku将在任务结束后删除tmp目录。

答案 1 :(得分:4)

Heroku不支持您的应用程序接收FTP。

如果你真的想要它,你可能会在接收FTP时写一个Heroku插件。

答案 2 :(得分:2)

我还需要一个Heroku实例来通过FTP接收文件。

我正在考虑使用Brick FTP

webhook表示文件已上传时,我计划下载并将文件内容导入数据库。

答案 3 :(得分:1)

FTP不支持主机标头,因此您很难将您的请求放入Heroku网格和我想象的应用程序中。

我更倾向于将您的文件发送到Amazon S3存储桶并让您的应用程序从那里获取文件并以这种方式处理它们,或者类似地将您的应用程序扩展到FTP服务器并检索文件以进行处理方式。

答案 4 :(得分:0)

是的,这应该是可能的。您需要查看net/ftp模块,看看它是如何工作的,但它应该是可能的。

我发现this project可能就是一个例子。