2010-09-14 8 views
5

Ich habe eine Rails 2.3.5 app aktualisiert bekommen Rails 3. Ich alles, was habe ich verpflichtet bin, für das Upgrade zu tun, und wenn ich starten Sie den Schienen ServerRails 3 Server Startup Problem mit fastercsv

rails server 

mit es gibt mir diese

Please switch to Ruby 1.9's standard CSV library. It's FasterCSV plus 
support for Ruby 1.9's m17n encoding engine. 

ich bin mit ruby-1.9.2-p0 und haben fastercsv (1.5.3) gem installiert. Mit Hilfe von puts-Anweisungen konnte ich herausfinden, wo der Fehler aufgetreten ist. Ich fand, dass die Ausführung an dieser Linie

Bundler.require(:default, Rails.env) if defined?(Bundler) 

in der Datei application.rb stoppt. Ich habe viele Dinge ausprobiert, aber keine funktioniert .. bitte helfen ..

Antwort

7

Entfernen Sie friendCSV aus Ihrer Gemfile in der Anwendung. Bundler versucht, FasterCSV anzufordern, weil Sie es in der Gemdatei angegeben haben.

+0

ich diesen Fehler application.rb bekam: 54: in 'require ': keine solche Datei zu laden - fastercsv (Loaderror) – Anand

+0

eigentlich habe ich eine Reihe von Aussagen erfordern in der application.rb für Edelsteine die in der App verwendet werden, von denen eine 'fastercsv' in der 54. Zeile benötigt. – Anand

+0

Sie sollten keine Anforderungen für Edelsteine ​​in Ihrer Anwendung setzen. Rb so. Verwenden Sie Bundler, um alle erforderlichen Edelsteine ​​für Ihr Projekt zu konfigurieren, da dies die neue de-facto-Methode zum Einbinden von Edelsteinen in ein Projekt ist. – davydotcom

6

Mit 1.9 brauchst du das fastercsv-Juwel nicht mehr, da es in der Standardbibliothek gebündelt ist. Jetzt müssen Sie nur tun:

require 'csv' 
CSV.open("temp.csv", "w") do |csv| 
    csv << ["line1row1", "line1row2"] 
    csv << ["line2row1", "line2row2"] 
    # ... 
end 
+0

Das behebt den Fehler, den ich hatte ... nach oben! –

+0

const_missing ': Bitte wechseln Sie zu der Standard-CSV-Bibliothek von Ruby 1.9. Es ist FasterCSV plus-Unterstützung für Ruby 1.9 m17n Encoding-Engine. (NotImplementedError) –

2

Dies ist die Lösung, die ich gefunden:

require 'fastercsv' 
require 'csv' 

class ImportFileToAssetsWithFasterCsv < ActiveRecord::Migration 
    def self.up 
    if CSV.const_defined? :Reader 
    csv = FasterCSV 
    else 
    csv = CSV 
    end 

    file = 'db/staticfiles/DB-good-rightnames-forimport.csv' 
    csv.foreach(file) do |row| 
     Asset.create!(:country => row[0], :city => row[1], :latlong => row[2], :XX => row[3], :DEC => row[4], :point_name => row[5], :system_type => row[6], :system_brand => row[7], :function => row[8], :operator_name => row[9], :operator_brand => row[10], :parent_company => row[11], :app => "WWW", :language => "en", :source => "XXX", :Z_name => "International", :pref_format => "") 
    end 
    end 

    def self.down 
    IspcAsset.destroy_all() 
    end 
end 
1

Wenn verwendet FasterCsv in Schleife oder im Code nur ändern mit Csv und arbeitet für mich. Entfernen Sie den Edelstein 'fastercsv' aus der Edelsteindatei. Schreiben Sie einfach Ihren Code in den Controller, keine Notwendigkeit, anderen Code irgendwo in Config hinzuzufügen.

Dies ist das Beispiel für falschen Code.

class HomeController < ApplicationController 
    require 'fastercsv' 


def download_csv 
    @invitation = Invitation.find(params[:id]) 
    @activities = Version.where("created_at >= ?", @invitation.created_at) 
    if params[:export] 

     csv_string = FasterCSV.generate do |csv| 
     # header row 
      csv << ["Date", "Event", "Details"] 

      @activities.each do |act| 
       csv << [act.created_at.strftime("%d-%m-%Y"), act.event, act.item_id] 

      end 
     end 
     timestamp = Time.now.strftime('%Y-%m-%d_%H:%M:%S') 
     send_data csv_string, 
      :type => 'text/csv; charset=iso-8859-1; header=present', 
      :disposition => "attachment; filename=goal_history_#{timestamp}.csv" 
    end 
    end 

und gerade mit dem Ändern des Wortes FasterCsv zu Csv korrigiert und es funktioniert. wie unten

class HomeController < ApplicationController 
    require 'csv' 


def download_csv 
    @invitation = Invitation.find(params[:id]) 
    @activities = Version.where("created_at >= ?", @invitation.created_at) 
    if params[:export] 

     csv_string = CSV.generate do |csv| 
     # header row 
      csv << ["Date", "Event", "Details"] 

      @activities.each do |act| 
       csv << [act.created_at.strftime("%d-%m-%Y"), act.event, act.item_id] 

      end 
     end 
     timestamp = Time.now.strftime('%Y-%m-%d_%H:%M:%S') 
     send_data csv_string, 
      :type => 'text/csv; charset=iso-8859-1; header=present', 
      :disposition => "attachment; filename=goal_history_#{timestamp}.csv" 
    end 
    end 
+0

das hilft mir in Schienen 3.2.1 thx chs :) –