2009-11-17 81 views
1

我有一個rails應用程序,引用了TMY3 meteorological dataset,這是一個不同的小時天氣觀察1000多個不同的網站。如何在Rails應用程序的測試數據庫中創建持久表?

我下載了整個數據集,並將需要的列吸收到本地表中,該表通過站點索引,這使得它在開發和生產中變得更加快速。

但是,索引需要5分鐘的時間,這使得每次測試都需要加載一個巨大的痛苦。這張表永遠不會改變,所以我只想將它加載到我的測試環境中,然後將它放在那裏運行我的其他測試。我所有的其他模型和表格都是標準的軌道交易,可根據需要進行分解或模擬。

任何想法?

+0

你用db:seed播種嗎?你如何加載這些數據進行測試? – Selva 2009-11-17 05:18:02

+0

我不知道db:seed - 現在我只是不加載(或測試)該模型,這是品牌嶄新的。我通過將以前的mysqldumped文件導入到mysql中將表加載到我的開發和生產環境中。 – Tarek 2009-11-17 17:11:19

回答

1

您可能會看到this question about db:test:prepare是否適用於您的情況。

+0

我最終採用了這種方法 - 實際上覆蓋了db:test:purge,只是單獨刪除每個非持久表,而不是刪除整個數據庫並重新創建它。 還有一點額外的複雜性,因爲我現在必須弄清楚如何從schema.rb中獲取持久數據庫,或者至少不會在測試環境中加載。 – Tarek 2009-11-17 23:28:51

+0

後續問題和答案在這裏:http://stackoverflow.com/questions/1752667/keep-a-table-out-of-schema-rb-during-migrations 基本上,必須添加以下行到environment.rb : ActiveRecord :: SchemaDumper.ignore_tables = [「table_name」] – Tarek 2009-11-18 05:13:17

2

對於您不需要在測試時間被拆除的模型,請將其放在單獨的數據庫中以用於測試目的。只有從database.yml加載的測試數據庫被清除並從開發數據庫的模式重建。

class PersistModel < ActiveRecord::Base 
    PersistModel.establish_connection(
     :adapter => "sqlite3", 
     :database => "db/persist.sqlite3" 
    ) 
end 

這個類將永遠不會清除數據庫。

您可能會變得富有創意並擁有建立不同連接的真實模型的測試版本。

class WeatherTest < Weather 
    WeatherTest.establish_connection(
     :adapter => "sqlite3", 
     :database => "db/weather.sqlite3" 
    ) 
end 

這樣,所有來自「真實」模型的函數都可以用於您的測試版本。

+0

這絕對是一個優雅的方式,但我需要將持久表連接到幾個非持久表。 – Tarek 2009-11-17 23:29:31

相關問題