1

ftpサーバーに接続し、ファイルをダウンロードして、それをガンジップするrakeタスクがあります。これはローカルで機能しますが、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 devサイトから、ファイルを杉の#{Rails.root} /tmp/に保存できるようです。これは可能ですか?もしそうなら、私は間違ったアプローチを取っていますか?

4

3 に答える 3

4

ファイルvitNET:: FTPをダウンロードすることは可能ですが、herokuはパッシブモードの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に保存できますが、dynoが再起動されると、そのデータは失われることを知っておいてください。さらに、あるdynoが別のdynoのtmpディレクトリにアクセスすることはできません。

データ処理と短期間の保存には、tmpディレクトリが最適です。

于 2012-09-10T18:06:08.367 に答える
-1

データベースをバックアップ/インポートしようとしていますか?

PGBACKUPSを使用します。ダンプはS3に送られます。そこからダウンロードまたはインポートできます。

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

私は、herokuに切り替える前に、FTP経由で行っていたのと同じことをしていました。pgbackupsはそれをとても簡単にします。

于 2012-09-10T18:49:18.917 に答える