2009-11-17 39 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

相关问题