我有一些种子数据,可以在我的开发设置中创建1000个用户。在开发过程中,我偶尔会使用以下命令重置db:
rake db:reset它以大约10个用户/秒的速度插入我的用户。我认为这是缓慢的,但我学会了接受它。
最近,在使用以下命令调试某些rspec测试时,我在测试环境中运行了db:reset:
rake db:reset RAILS_ENV=test它将用户插入到大约100用户/秒!我可以在不同的环境之间复制和替换,而开发环境是缓慢的,而测试环境是快速的。
它在database.yml中使用完全相同的mysql设置。
Development
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为使测试env这么快而做了什么?我希望在dev环境中实现这些设置,并将我的播种过程加快10倍。
发布于 2014-02-21 10:57:47
如果您使用的设计,它可能是由密码拉伸造成的。在config/initializers/devise.rb中:
# 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这似乎与您正在寻找的开发和测试环境之间的不同。试着玩这句话
发布于 2014-02-20 20:47:11
我希望在dev环境中实现这些设置,并将我的播种过程加快10倍。
底线是,如果您想立即插入太多的数据,您不应该考虑使用rails方法。我遭受了it.Rails附加了太多的回调,比如before_update, after_create等等。我已经插入了500 K的数据,每一个数据。我们使用了原始sql来加速这个过程。我们做了这样的事
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
endhttps://stackoverflow.com/questions/21918907
复制相似问题