Rails 3.1.0: несовместимые кодировки символов: ASCII-8BIT и UTF-8 - PullRequest
0 голосов
/ 24 октября 2011

Я использую Rails 3.1.0 и Ruby 1.9.2 с PostgreSQL. Я хочу получить данные из огромных файлов (~ 300 МБ) и поместить их в базу данных. Здесь я использую транзакцию:

File.open("./public/data_to_parse/movies/movies.list").each do |line|
  if line.match(/\t/)
    title = line.scan(/^[^\t(]+/)[0]
    title = title.strip if title 
    year = line.scan(/[^\t]+$/)[0]
    year = year.strip if year
    movie = Movie.find_or_create(title, year)
    temp.push(movie) if movie
    if temp.size == 10000
      Movie.transaction do
        temp.each { |t| t.save }
      end    
       temp =[]
    end
  end
end

Но я хочу улучшить производительность, используя массовую вставку с сырым SQL:

temp.push"(\'#{title}\', \'#{year}\')" if movie
  if temp.size == 10000
   sql = "INSERT INTO movies (title, year) VALUES #{temp.join(", ")}" 
   Movie.connection.execute(sql)
   temp =[]
  end
end

Но у меня есть эта ошибка "несовместимые кодировки символов: ASCII-8BIT и UTF-8". Когда я использую activerecord, все нормально. Файлы содержат символы, такие как немецкие умлауты. Я попробовал все отсюда Rails 3 - (несовместимые кодировки символов: UTF-8 и ASCII-8BIT): , но это мне не помогает.

У вас есть идеи, откуда это происходит?

Спасибо

1 Ответ

2 голосов
/ 25 октября 2011

решаемая. Проблема была в кодировке файлов. Они были в ISO_8859-1, и я преобразовал его в UTF-8 через iconv.

...