1

DB からエクスポートして CSV ファイルとして保存し、FTP サーバーにアップロードするデータがあります。このサイトは Heroku でホストされており、tmp (または log?) ディレクトリにしか書き込みできないことを理解しています。

これは私のローカル マシンでは問題なく機能しますが、Heroku では機能しません。

これが私のレーキタスクです:

require 'csv' 
require 'net/ftp'

task :export_data => :environment do
  path = "tmp/" 
  filename = 'test_' + Date.today.to_s + '.dat' 

  messages = Message.where( :foo => bar) 
  CSV.open(path + filename, "wb", :col_sep => '|') do |csv| 

    messages.each do |m| 
      csv << [m.id.to_s, m.name] 
      puts "Processing message " + m.id.to_s 
    end 
  end 

  puts "Uploading " + filename 
  ftp = Net::FTP.new('ftp.hostname.com') 
  ftp.login(user = "******", passwd = "*******") 
  ftp.puttextfile(path + filename, filename) 
  ftp.quit() 

  puts "Finished." 
end

2 つの問題があります。

Q1. レコードを繰り返し処理するのは非常に遅いです。200で5分。これが使えるかどうかはわかりません。

Q2. ftp にエラーが発生し、クラッシュします。ファイルを FTP サーバーに配置し始めますが、データは書き込みません。空ファイルです。ログには次のように書かれています。

Starting process with command `rake jobs:work`
2011-10-17T21:17:11+00:00 app[worker.1]: (in /app)
2011-10-17T21:17:13+00:00 heroku[worker.1]: State changed from starting to up
2011-10-17T21:17:13+00:00 app[worker.1]: rake aborted!
2011-10-17T21:17:13+00:00 app[worker.1]: Don't know how to build task 'jobs:work'
2011-10-17T21:17:13+00:00 app[worker.1]: /usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1720:in `[]'
2011-10-17T21:17:13+00:00 app[worker.1]: /usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2040:in `invoke_task'
2011-10-17T21:17:13+00:00 app[worker.1]: /usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level'
2011-10-17T21:17:13+00:00 app[worker.1]: /usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2019:in `each'
2011-10-17T21:17:13+00:00 app[worker.1]: /usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level'
2011-10-17T21:17:13+00:00 app[worker.1]: /usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
2011-10-17T21:17:13+00:00 app[worker.1]: /usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2013:in `top_level'
2011-10-17T21:17:13+00:00 app[worker.1]: /usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1992:in `run'
2011-10-17T21:17:13+00:00 app[worker.1]: /usr/ruby1.9.2/bin/rake:31:in `<main>'
2011-10-17T21:17:13+00:00 heroku[worker.1]: Process exited
2011-10-17T21:17:14+00:00 heroku[worker.1]: State changed from up to crashed

ファイルが利用できないという問題や、ファイル システムに関するその他の問題がありますか? ローカル マシンで動作します。

何か案は?

ありがとう。

4

2 に答える 2

2

答えは

2011-10-17T21:17:13+00:00 app[worker.1]: Don't know how to build task 'jobs:work'

何らかの理由で、Rakefile は job:work を認識していません。これがdelayed_jobタスクであることを考慮して、delayed_jobインストールのすべてのステップを適切にカバーしたと確信していますか?

これを本番モードでローカルに試しましたか?

于 2011-10-18T10:17:33.907 に答える
1

答え:

Q1: 遅くないです。遅い部分がコンソールに出力されているため、遅く見えるだけです。

Q2: 設定でFTPが直ったftp.passive = true

于 2011-11-06T15:45:37.523 に答える