1

我有一个 rake 任务,它连接到一个 ftp 服务器,下载一个文件,然后对其进行压缩。这在本地工作,但是当我在 heroku cedar 服务器上运行任务时,在执行 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 run 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 开发站点看来,您可以将文件保存到 cedar 上的 #{Rails.root}/tmp/ 。这可能吗?如果是这样,我是否采取了错误的方法?

4

3 回答 3

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
于 2012-09-12T19:27:26.427 回答
0

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

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

于 2012-09-10T18:06:08.367 回答
-1

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

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

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

在切换到 Heroku 之前,我曾经通过 FTP 做同样的事情。pgbackups 使它变得如此容易。

于 2012-09-10T18:49:18.917 回答