Проблема запуска сервера Rails 3 с более быстрым ccsv - PullRequest
5 голосов
/ 14 сентября 2010

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

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. с помощью операторов put я смог отследить, где произошла ошибка. я обнаружил, что выполнение останавливается на этой строке

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

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

Ответы [ 5 ]

7 голосов
/ 16 сентября 2010

с 1.9 вам больше не нужно / можно использовать гем quickcsv, поскольку он входит в стандартную библиотеку lib.Теперь вам просто нужно сделать:

require 'csv'
CSV.open("temp.csv", "w") do |csv|
  csv << ["line1row1", "line1row2"]
  csv << ["line2row1", "line2row2"]
  # ...
end
7 голосов
/ 14 сентября 2010

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

2 голосов
/ 10 февраля 2011

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

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 голос
/ 26 марта 2012

Если используется FasterCsv в цикле или в коде, просто измените его с помощью Csv, и он у меня работает.Удалите драгоценный камень 'quickcsv' из файла драгоценного камня.Просто напишите свой код в контроллере, нет необходимости добавлять другой код где-то в конфиге.

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

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
1 голос
/ 09 декабря 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...