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/に保存できるようです。これは可能ですか?もしそうなら、私は間違ったアプローチを取っていますか?