我有一个类似于下面的Rake脚本,但我想知道是否有更有效的方法来执行此操作,而不必删除数据库,运行所有迁移,重新设置数据库,然后添加示例数据?
namespace :db do
desc 'Fill database with sample data'
task populate: :environment do
purge_database
create_researchers
create_organisations
add_survey_groups_to_organisations
add_members_to_survey_groups
create_survey_responses_for_members
end
end
def purge_database
puts 'about to drop and recreate database'
system('rake db:drop')
puts 'database dropped'
system('rake db:create')
system('rake db:migrate')
system('rake db:seed')
puts 'Database recreated...'
end
def create_researchers
10.times do
researcher = User.new
researcher.email = Faker::Internet.email
researcher.save!
end
end
Run Code Online (Sandbox Code Playgroud)
Agi*_*gis 27
你应该不通过样本数据填充数据库db:seed.这不是种子文件的目的.
db:seed用于您的应用程序运行所需的初始数据.它不是用于测试和/或开发目的.
我所做的是拥有一个填充样本数据的任务和另一个删除数据库,创建,迁移,种子和填充的任务.很酷的是它由其他任务组成,所以你不必在任何地方重复代码:
# lib/tasks/sample_data.rake
namespace :db do
desc 'Drop, create, migrate, seed and populate sample data'
task prepare: [:drop, :create, "schema:load", :seed, :populate_sample_data] do
puts 'Ready to go!'
end
desc 'Populates the database with sample data'
task populate_sample_data: :environment do
10.times { User.create!(email: Faker::Internet.email) }
end
end
Run Code Online (Sandbox Code Playgroud)
Phi*_*rom -3
我建议rake db:seed自给自足。我的意思是,您应该能够多次运行它而不会造成任何损坏,同时确保加载您需要加载的任何示例数据。
因此,对于您的研究, db:seed 任务应该执行如下操作:
User.destroy_all
10.times do
researcher = User.new
researcher.email = Faker::Internet.email
researcher.save!
end
Run Code Online (Sandbox Code Playgroud)
您可以一遍又一遍地运行此程序,并确保最终总会有 10 个随机用户。
我认为这是为了发展。在这种情况下,我不会将其放入 db:seed 中,因为这可能会在生产中运行。但是您可以将其放入类似的 rake 任务中,您可以根据需要经常重新运行该任务。
| 归档时间: |
|
| 查看次数: |
2880 次 |
| 最近记录: |