Frage

Ich habe einige Daten zum Exportieren von DB und speichern als CSV -Datei und lade dann auf einen FTP -Server hoch. Die Website wird auf Heroku gehostet und ich verstehe, dass Sie nur in die TMP -Verzeichnisse (oder Protokoll?) Verzeichnisse schreiben können.

Das funktioniert hervorragend auf meiner lokalen Maschine, funktioniert aber nicht auf Heroku.

Hier ist meine Rake -Aufgabe:

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

Es gibt 2 Probleme:

Q1. Es ist unglaublich langsam zu durch die Aufzeichnungen. 5 Minuten für 200. Ich weiß nicht, ob dies verwendet werden kann.

Q2. Die FTP hat einen Fehler und stürzt ab. Es stellt die Datei auf den FTP -Server ein, schreibt jedoch keine Daten darauf. Es ist eine leere Datei. Das Protokoll lautet:

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

Gibt es ein Problem mit der Datei, die nicht verfügbar ist oder ein anderes Problem mit dem Dateisystem? Arbeitet auf lokaler Maschine.

Irgendwelche Ideen?

Vielen Dank.

War es hilfreich?

Lösung 2

Antworten:

Q1: Es ist nicht langsam. Es sieht nur langsam aus, weil der langsame Teil der Konsole ausgibt.

F2: FTP wurde durch Einstellung fixiert ftp.passive = true

Andere Tipps

Die Antwort ist in

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

Aus irgendeinem Grund ist sich Ihre Rakefile der Jobs nicht bewusst: Arbeit. Sind Sie sicher, dass Sie jeden Schritt der Installation von Delayed_Job ordnungsgemäß abgedeckt haben?

Haben Sie dies lokal im Produktionsmodus ausprobiert?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top