请原谅这个棘手的问题,但无论如何让我的Rails应用程序接收FTP传输?
我每天都有无法控制的FTP上传,每天都会将数百个HTML页面上传到我们现有的服务器上。我想将这个站点移动到Heroku上的Rails-only部署,但是我无法触及这个FTP上传(仍然需要发生)。
由于Heroku不提供公共存储空间或FTP,我无法将文件直接上传到Heroku(我真的不想)。我想要的是将FTP上传指向我的Rails应用程序,并让我的Rails应用程序接收并解析HTML文件以提取我需要的信息,将其存储在数据库中,并做任何我需要做的事情。 (有点像RESTful动作,但通过FTP而不是任何标准REST动词)。
这是完全可能的还是我因为思考而疯狂?如果有可能,我该怎么做呢?
答案 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不支持活动模式。答案 1 :(得分:4)
Heroku不支持您的应用程序接收FTP。
如果你真的想要它,你可能会在接收FTP时写一个Heroku插件。
答案 2 :(得分:2)
答案 3 :(得分:1)
FTP不支持主机标头,因此您很难将您的请求放入Heroku网格和我想象的应用程序中。
我更倾向于将您的文件发送到Amazon S3存储桶并让您的应用程序从那里获取文件并以这种方式处理它们,或者类似地将您的应用程序扩展到FTP服务器并检索文件以进行处理方式。
答案 4 :(得分:0)
是的,这应该是可能的。您需要查看net/ftp
模块,看看它是如何工作的,但它应该是可能的。
我发现this project可能就是一个例子。