2010-09-14 2 views
5

У меня есть рельсы 2.3.5 приложения получать повышен до Rails 3. Я сделал все, что я обязан сделать для модернизации и когда я начинаю сервера рельсы с помощьюRails проблема 3 сервера Запуск с fastercsv

rails server 

она дает мне эту

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

Я использую ruby-1.9.2-p0 и имею fastercsv (1.5.3) gem установлено. с помощью операторов puts я смог отслеживать, где произошла ошибка. я обнаружил, что выполнение прекращается в этой строке

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

в файле application.rb. Я пробовал много вещей, но никто не работал .. пожалуйста, помогите ..

ответ

7

Удалите fastCSV из вашего Gemfile в приложении. Bundler пытается потребовать FasterCSV, потому что он указан в Gemfile.

+0

Я получил этот application.rb ошибки: 54: в 'требуется ': нет такого файла для загрузки - fastercsv (LoadError) – Anand

+0

на самом деле у меня есть набор требуют заявлений в application.rb для драгоценных камней которые используются в приложении, один из которых требует «fastcsv» в 54-й строке. – Anand

+0

Вы не должны ставить требования для драгоценных камней в вашем приложении.rb, как это. Используйте bundler для настройки всех необходимых драгоценных камней для вашего проекта, поскольку это новый метод defacto для включения драгоценных камней в проект. – davydotcom

6

с 1.9 вам больше не нужно/может использовать драгоценный камень fastcsv, так как он поставляется в std lib. Теперь вам просто нужно сделать:

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

Это фиксировало ошибку, с которой я столкнулся ... наверх! –

+0

const_missing ': Пожалуйста, переключитесь на стандартную библиотеку CSV Ruby 1.9. Это FasterCSV плюс поддержка механизма кодирования m17n Ruby 1.9. (NotImplementedError) –

2

Это решение я нашел:

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

Если используется FasterCsv в цикле или в коде просто изменить его Csv и работает для меня. Удалить gem 'fastcsv' из файла gem. Просто напишите свой код в контроллере, не нужно добавлять другой код в где-то в config.

Это пример неправильного кода.

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 

и только что скорректировано с изменением слова FasterCsv на Csv, и оно работает. как показано ниже

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

это помогает мне в рельсах 3.2.1 thx chs :) –

Смежные вопросы