如何在雪松上将文件保存到/ tmp / via ftp

时间:2012-09-10 16:32:19

标签: ruby-on-rails heroku cedar

我有一个rake任务连接到ftp服务器,下载文件,然后枪杀它。这在本地工作,但是当我在我的heroku雪松服务器上运行任务时,我执行net :: ftp.getbinaryfile后没有反馈。

以下是下载文件的代码:

tempfile = "#{Rails.root}/tmp/#{Process.pid}_#{MyApp::Application.config.products_bbcom_file}"
      ftp = Net::FTP.new()
      puts "connecting to ftp server #{MyApp::Application.config.products_bbcom_host}"
      ftp.connect(MyApp::Application.config.products_bbcom_host)
      puts "logging in"
      ftp.login(MyApp::Application.config.products_bbcom_user,MyApp::Application.config.products_bbcom_pass)
      puts "changing directory"
      files = ftp.chdir(MyApp::Application.config.products_bbcom_path)
      #files = ftp.list('n*')
      puts "downloading file #{MyApp::Application.config.products_bbcom_file} to #{tempfile}"
      ftp.getbinaryfile(MyApp::Application.config.products_bbcom_file, tempfile, 1024)
      ftp.close      

当我在heroku上执行任务时:heroku运行rake db:import并拖尾我看到的日志:

2012-09-10T16:26:24+00:00 heroku[run.1]: Awaiting client
2012-09-10T16:26:24+00:00 heroku[run.1]: Starting process with command `bundle exec rake db:import`
2012-09-10T16:26:25+00:00 heroku[run.1]: State changed from starting to up

任务的输出到达:

== Starting ==
Connecting to database specified by DATABASE_URL
connecting to ftp server datatransfer.cj.com
logging in
changing directory
downloading file

脚本达到了尝试将文件下载到#{Rails.root} / tmp /的程度,但之后再也没有响应。这只需要几秒钟本地,但我等了几分钟,任务没有做任何事情。

从heroku开发网站看来,您可以将文件保存到#{Rails.root} / tmp / on cedar。这可能吗?如果是这样,我采取了错误的做法?

3 个答案:

答案 0 :(得分:4)

可以下载文件vit .NET :: FTP,但heroku只支持PASSIVE模式FTP。我需要指定我想使用被动模式。这是一个简化的例子:

ftp = Net::FTP.new()
ftp.passive = true
ftp.connect(host)
ftp.login(username,password)
files = ftp.chdir(path_to_file)
ftp.getbinaryfile(filename, tempfile, 1024)
ftp.close

答案 1 :(得分:0)

您可以将文件保存到./tmp,但要知道如果dyno重新启动,那么数据将会消失。另外,一个dyno无法访问另一个dyno的tmp目录。

对于数据处理和短期存储,tmp目录是一个很好的选择。

答案 2 :(得分:0)

您是否尝试备份/导入数据库?

使用PGBACKUPS。转储进入S3。您可以从那里下载或导入。

https://devcenter.heroku.com/articles/pgbackups#restoring-from-a-backup

在切换到heroku之前,我曾经通过FTP做同样的事情。 pgbackups让它变得如此简单。