2010-09-14 9 views
5

Tengo rieles 2.3.5 app conseguir actualizar a Rails 3. hice cada cosa estoy obligado a hacer para mejorar y cuando inicio el servidor de raíles usandorieles problema del servidor 3 Puesta en marcha con fastercsv

rails server 

me da este

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

estoy usando ruby-1.9.2-p0 y tengo fastercsv (1.5.3) gem instalado. con la ayuda de las declaraciones de puts, pude rastrear dónde ocurrió el error. encontré que la ejecución se detiene en esta línea

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

en el archivo application.rb. Intenté muchas cosas pero ninguna funcionó. Por favor ayuda ...

Respuesta

7

Elimina fasterCSV de tu Gemfile en la aplicación. Bundler está tratando de requerir FasterCSV porque lo tienes especificado en el Gemfile.

+0

Tengo este error application.rb: 54: en 'requerir ': No existe el fichero a cargar - fastercsv (LoadError) – Anand

+0

En realidad tengo un conjunto de requerir declaraciones en el application.rb para las gemas que se usan en la aplicación, uno de los cuales requiere 'fastercsv' en la línea 54. – Anand

+0

No deberías poner requiere gemas en tu application.rb así. Usa bundler para configurar todas las gemas necesarias para tu proyecto ya que este es el nuevo método defacto para incluir gemas en un proyecto. – davydotcom

6

con 1.9 ya no necesita/puede usar la gema fastercsv, ya que está incluida en la lib estándar. Ahora sólo tiene que hacer:

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

Esto corrigió el error que estaba teniendo ... ¡hasta arriba! –

+0

const_missing ': cambie a la biblioteca CSV estándar de Ruby 1.9. Es compatible con FasterCSV plus para el motor de codificación m17n de Ruby 1.9. (NotImplementedError) –

2

Esta es la solución que encontré:

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

Si se utiliza FasterCsv en bucle o en el código simplemente cambiar con Csv y funciona para mí. Elimina la gema 'fastercsv' del archivo gema. Simplemente escriba su código en el controlador, no es necesario agregar otro código en algún lugar de la configuración.

Este es el ejemplo de código incorrecto.

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 

y simplemente se corrigió con el cambio de palabra FasterCsv a Csv y funciona. como a continuación

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

esto me ayuda en carriles 3.2.1 thx chs :) –

Cuestiones relacionadas