2010-04-12 62 views
5

使用Ruby on Rails,有没有办法将我的生产数据库转储到Rails的测试部分可以访问的表单中?Ruby on Rails:访问生产数据库数据以进行测试

我正在考虑将生产数据库转换为固定装置的方式,或者将数据从生产数据库迁移到测试数据库的方式,这些数据库不会由Rails定期清除。

我想将这些数据用于各种测试,但最重要的是在我的脑海中使用真实数据与性能测试,以便我能够真实地理解加载时间。

+0

有可能是一种方式与红宝石做到这一点,但我会在耙子任务中使用的数据库命令(例如mysqldump)来代替。 – mckeed 2010-04-12 22:20:17

+0

这是一个非常好的问题。不幸的是,大多数提供的解决方案都不适合我。我做科学的东西,所以我们的数据库是巨大的,并且要抽取一些来生成测试数据库是非常困难的。有没有办法在DB只读模式下运行生产或开发的单元测试? – 2011-02-24 23:48:15

回答

0

您可以使用db文件夹内的seed.rb,用您需要的数据填充测试数据库。在Railscasts上有很好的示例:http://railscasts.com/episodes?search=seed

尽管如此,为了让您的生产数据远离您的测试环境,我们还是建议您。并做备份!

+0

嗯,我在想象生产=>测试共享数据将是一个严格的单向过程。 关于分贝:种子,感谢您的提示,我从来没有听说过它。但是,我真的没有看到使用这种方法将我的测试数据库与生产数据库中的信息结合起来的方法吗? – 2010-04-13 01:45:28

2

我们刚刚有一个类似的问题,最终在rspec中编写了一个帮助方法,它从生产数据库中提取一些数据(在我们的例子中,一些账户的登录细节)。

下应该给一个想法:

require 'yaml' 

def accounts 
    @accounts ||= lambda { 
    config = YAML.load_file("#{Rails.root}/config/database.yml")['production'] 

    dbh = Mysql.real_connect(config['host'], config['username'], config['password'], config['database']) 

    accounts = [] 
    result = dbh.query("SELECT `accounts`.* FROM `accounts`") 
    while row = result.fetch_hash do 
     row.delete("id") 
     accounts << Account.make(row) 
    end 

    dbh.close 

    return accounts 
    }.call 
end