rails 3: самый простой способ загрузить большой начальный список (20 000 отдельных слов) в таблицу (используя rake seed) в приложении Heroku? - PullRequest
3 голосов
/ 21 июля 2011

На моем локальном компьютере разработчика у меня есть список слов, по одному слову в строке, 20000 слов, которые мне нужно загрузить в новую таблицу, которую я назову Wordlist.

И мне нужно создать точно такую ​​же таблицу в нескольких приложениях Heroku, которые не имеют локального хранилища файлов.

схема таблицы просто id: целое число и слово: строка

Я прочитал множество статей об использовании seed.rb ... но не совсем понял, как заставить это работать со списком слов в файле на моем компьютере разработчика, загружая список в таблицу на моем локальном устройстве разработки. машина И на удаленных экземплярах приложения Heroku.

Любые идеи будут оценены!

Ответы [ 3 ]

6 голосов
/ 21 июля 2011

Я бы взял этот список слов и вставил в CSV, с одним словом в каждой строке. Это должно занять у вас 2 минуты. Затем используйте драгоценный камень FasterCSV, чтобы перебрать тот CSV, который вы сохранили в / lib / data. Вы можете вставить его в /db/seeds.rb.

seeds.rb

FasterCSV.foreach("#{RAILS_ROOT}/lib/data/words.csv", :headers => :first_row) do |row|
  Word.create_by_name(row[0])
end

Запусти свой рейк db: seed и все. Кстати,: headers =>: first_row означает просто пропустить первую строку, если у вас есть заголовок сверху. Если вы просто не пропустите эту часть.

Для удаленного файла:

require 'open-uri'
FasterCSV.foreach(open("http://remotehost.com/words.csv"), :headers => :first_row) do |row|
  Word.create_by_name(row[0])
end
2 голосов
/ 21 июля 2011

Ответ Криса получит данные в вашей локальной базе данных. Оказавшись там, у heroku уже есть встроенное решение для передачи данных в ваши приложения heroku. Команда

heroku db:push

Подробнее объясняется здесь http://devcenter.heroku.com/articles/taps

1 голос
/ 21 июля 2011

Очень похоже на @chris. Я нашел это обсуждение того, как делать это в seed.rb и запускать rake db: seed ... это просто захватывает список слов в простом текстовом формате по одной строке из интернет-ссылки. успешно выполнил это в списке из 10 тысяч слов.

http://asciicasts.com/episodes/179-seed-data

вот наш код в seed.rb:

require 'open-uri'

thefile = "http://www.example.com/wordlist.txt"
puts "deleting old words"
Wordlist.delete_all
x = 0
puts "opening '#{thefile}"
  open(thefile) do |words|
    puts "file opened"
    words.read.each_line do |aword|  
      puts "read: #{aword}"
      nextword = aword.chomp
      x = x+1
      puts "putting #{x} -> #{nextword}"
      Wordlist.create!(:txt => nextword, :x => x)  
    end  
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...