首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails测试db比开发db快10倍

Rails测试db比开发db快10倍
EN

Stack Overflow用户
提问于 2014-02-20 20:33:03
回答 2查看 333关注 0票数 0

我有一些种子数据,可以在我的开发设置中创建1000个用户。在开发过程中,我偶尔会使用以下命令重置db:

代码语言:javascript
复制
rake db:reset

它以大约10个用户/秒的速度插入我的用户。我认为这是缓慢的,但我学会了接受它。

最近,在使用以下命令调试某些rspec测试时,我在测试环境中运行了db:reset

代码语言:javascript
复制
rake db:reset RAILS_ENV=test

它将用户插入到大约100用户/秒!我可以在不同的环境之间复制和替换,而开发环境是缓慢的,而测试环境是快速的。

它在database.yml中使用完全相同的mysql设置。

Development

代码语言:javascript
复制
development:
  adapter: mysql2
  encoding: utf8
  database: mydb
  username: mydb
  password: password
  host: 127.0.0.1
  port: 3306

测试

代码语言:javascript
复制
development:
  adapter: mysql2
  encoding: utf8
  database: mydb_test
  username: mydb_test
  password: password
  host: 127.0.0.1
  port: 3306

这就是我如何为用户(这两种环境都是相同的)种子:

代码语言:javascript
复制
ActiveRecord::Base.transaction do
  1000.times do |i|
      User.create :first_name => Faker::Name.first_name, :last_name => Faker::Name.last_name, :email => Faker::Internet.email, :username => Faker::Internet.user_name, :password => '123456'
  end
end

有谁知道rails为使测试env这么快而做了什么?我希望在dev环境中实现这些设置,并将我的播种过程加快10倍。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-21 10:57:47

如果您使用的设计,它可能是由密码拉伸造成的。在config/initializers/devise.rb中:

代码语言:javascript
复制
# Limiting the stretches to just one in testing will increase the performance of
# your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use
# a value less than 10 in other environments.
config.stretches = Rails.env.test? ? 1 : 10

这似乎与您正在寻找的开发和测试环境之间的不同。试着玩这句话

票数 1
EN

Stack Overflow用户

发布于 2014-02-20 20:47:11

我希望在dev环境中实现这些设置,并将我的播种过程加快10倍。

底线是,如果您想立即插入太多的数据,您不应该考虑使用rails方法。我遭受了it.Rails附加了太多的回调,比如before_update, after_create等等。我已经插入了500 K的数据,每一个数据。我们使用了原始sql来加速这个过程。我们做了这样的事

代码语言:javascript
复制
ActiveRecord::Base.transaction do
  inserts = []
  TIMES.times do
   inserts.push "(3.0, '2009-01-23 20:21:13', 2, 1)"
 end
 sql = "INSERT INTO user_node_scores (`score`, `updated_at`, `node_id`, `user_id`) VALUES #{inserts.join(", ")}"
 User.connection.execute  s
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21918907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档