2013-07-10 23 views
7

Tôi có kịch bản lệnh Rake tương tự như dưới đây, nhưng tôi tự hỏi liệu có cách nào hiệu quả hơn để thực hiện việc này hay không, không cần phải thả cơ sở dữ liệu, chạy tất cả các di chuyển, chèn sẵn cơ sở dữ liệu và sau đó thêm dữ liệu mẫu?Rails được đề xuất cách thêm dữ liệu mẫu

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 
+0

Đây có phải là môi trường thử nghiệm của bạn không? –

+0

Điều này là dành cho môi trường phát triển – Lee

Trả lời

-3

Tôi khuyên bạn nên tự làm rake db:seed đủ. Theo đó tôi có nghĩa là, bạn sẽ có thể chạy nó nhiều lần mà không làm bất kỳ thiệt hại, trong khi đảm bảo rằng bất cứ điều gì mẫu dữ liệu bạn cần tải được nạp.

Vì vậy, đối với các nghiên cứu của mình, các db: nhiệm vụ hạt giống nên làm một cái gì đó như thế này:

User.destroy_all 
10.times do 
    researcher = User.new 
    researcher.email = Faker::Internet.email 
    researcher.save! 
end 

Bạn có thể chạy này hơn và hơn và hơn và được đảm bảo bạn sẽ luôn luôn kết thúc với 10 người ngẫu nhiên.

Tôi thấy điều này là để phát triển. Trong trường hợp đó, tôi sẽ không đặt nó trong db: hạt giống như có thể chạy trong sản xuất. Nhưng bạn có thể đặt nó vào một công việc cào tương tự mà bạn có thể chạy lại thường xuyên khi cần thiết.

+8

'db: seed' không phải là cách chính xác để điền vào cơ sở dữ liệu với dữ liệu mẫu. – Agis

23

Bạn nên không điền vào cơ sở dữ liệu của bạn với dữ liệu mẫu qua db:seed. Đó không phải là mục đích của tập tin hạt giống.

db:seed là dành cho dữ liệu ban đầu mà ứng dụng của bạn cần để hoạt động. Nó không dành cho mục đích thử nghiệm và/hoặc phát triển.

Điều tôi làm là có một nhiệm vụ điền dữ liệu mẫu và một tác vụ khác làm giảm cơ sở dữ liệu, tạo ra, di chuyển, hạt và điền. Điều thú vị là nó bao gồm các tác vụ khác, do đó bạn không phải sao chép mã ở bất kỳ đâu:

# 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 
+2

Điều này sẽ là câu trả lời được chấp nhận lại: hạt giống so với nhiệm vụ – yamori

+0

@agis Có một số lý do tại sao một số thuộc tính ActiveRecord sẽ bị thiếu nếu tôi làm điều này? Xem https://stackoverflow.com/questions/44381014/the-case-of-the-disappearing-activerecord-attribute –

+0

Đây nên là 'lược đồ: tải' thay cho' di chuyển'. Bạn không nên chạy lại các lần di chuyển mỗi khi bạn khởi động lại cơ sở dữ liệu, đó là những gì 'db/schema.rb' cho. Hướng dẫn chính thức: http://guides.rubyonrails.org/active_record_migrations.html#what-are-schema-files-for-questionmark – brainbag

Các vấn đề liên quan