2011-07-20 41 views
3

在我的本地開發機器上,我有一個單詞列表,每行一個單詞,20,000個單詞,我需要加載到一個新表中,我將稱之爲Wordlist。rails 3:在Heroku應用程序中將最大種子列表(20000個單詞)加載到表格中(使用rake種子)的最簡單方法?

而且我需要在幾個Heroku應用上創建完全相同的表,這些表沒有本地文件存儲。

表模式僅僅是ID:整數和字:串

我讀過有關使用seed.rb許多文章......但是不太瞭解如何使這項工作在一個單詞列表一個在我的開發機器上的文件,將列表加載到本地開發機器上的一個表中以及遠程Heroku應用程序實例中。

任何想法,將不勝感激!

回答

1

非常相似@克里斯我發現seed.rb做和運行耙分貝的討論:種子..這只是抓住簡單的詞表來自互聯網網址的每一行文本格式。在10k的單詞列表中成功運行此項目。

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 
6

我會把那個單詞列表粘貼到一個csv中,每行有一個單詞。這應該需要2分鐘。然後使用FasterCSV gem遍歷您保存在/ lib/data中的csv。您可以將其粘貼到/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 

運行你的耙分貝:種子,就是這樣。順便說一下: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 
+0

@nolie想更多的,你會在開發運行它,並在Heroku上運行它。那麼你將不需要重寫數據庫。 csv文件將成爲項目的一部分,因此您可以只執行'heroku rake db:seed',它將在遠程登臺/生產環境中執行與重寫任何其他表的操作相同的操作。 –

+0

這是有幫助的... upvoted答案...在閱讀你的答案後發現一個輕微的變化,從一個網址抓取文件,它很簡單地解決了我們的Heroku問題。 – jpwynn

+0

啊我明白了。我將在我的答案中包含遠程文件的方式。也許給我一個複選標記。大聲笑。很高興爲您提供幫助 –

2

克里斯的回答將得到的數據在你本地數據庫。一旦在那裏,heroku已經有一個內置的解決方案,用於將數據傳輸到你的heroku應用程序。該命令是

heroku db:push 

更多的是在這裏解釋http://devcenter.heroku.com/articles/taps

+0

感謝,儘管從文檔中我認爲只有我們不想做...我們正在添加一個表到現有的生產數據庫。 – jpwynn

+0

是的,它覆蓋了現有的數據庫。如果它的產量分貝..我不知道...希望你已經構建了一個api = P – noli

+0

儘管認真,你可能可以用一個POST動作構建一個簡單的Rack/Sinatra應用程序。將數據發佈到端點時,它可以將該元素插入到生產數據庫中。然後,在客戶端(你),你採取克里斯的腳本,循環訪問數據,並將每個迭代HTTP post發送到端點。這實際上是可行的。您可以使用路徑 – noli

相關問題