【发布时间】:2014-02-20 20:33:03
【问题描述】:
我有一些种子数据,可以在我的开发设置中创建 1000 个用户。有时我会在开发过程中使用此命令重置我的数据库:
rake db:reset
它以大约 10 个用户/秒的速度插入我的用户。我认为这很慢,但学会了忍受它。
我最近在测试环境中运行了db:reset,同时使用此命令调试了一些 rspec 测试:
rake db:reset RAILS_ENV=test
它以大约 100 个用户/秒的速度插入用户!我可以重现它并在环境之间切换,开发环境很慢,而测试环境很快。
它在database.yml中使用完全相同的mysql设置:
发展
development:
adapter: mysql2
encoding: utf8
database: mydb
username: mydb
password: password
host: 127.0.0.1
port: 3306
测试
development:
adapter: mysql2
encoding: utf8
database: mydb_test
username: mydb_test
password: password
host: 127.0.0.1
port: 3306
这就是我为用户播种的方式(两种环境都一样):
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 正在做什么让测试环境如此之快?我想在开发环境中实现这些设置,并将我的播种过程加快 10 倍。
【问题讨论】:
-
您能否添加更多有关您的种子文件和测试环境的详细信息?
-
用户表上有索引吗?开发数据库中有很多用户吗?
-
我添加了播种技术。
-
只有这 1000 个用户。 devise 添加了一个名为“reset_password_token”的索引。
-
奇怪的是它完全相同的命令,相同的种子数据,相同的mysql实例。唯一的区别是
RAILS_ENV=test
标签: mysql ruby-on-rails ruby performance rspec