복붙노트

[RUBY-ON-RAILS] 레일에서 데이터베이스를 시드하는 가장 좋은 방법은 무엇입니까?

RUBY-ON-RAILS

레일에서 데이터베이스를 시드하는 가장 좋은 방법은 무엇입니까?

내 레일 응용 프로그램에서 일부 초기 데이터를 채우는 레이크 작업을해야합니다. 예를 들어, 국가, 주, 이동 통신사 등의 경우

내가 지금까지 설정 한 방법은, 내가 / DB / 비품에있는 파일의 생성 문의 무리와 레이크 작업이 프로세스를 가지고있다. 예를 들어, 내가 가진 하나 개의 모델이 테마입니다. 나는 / DB / 비품에 theme.rb 파일이 그 다음과 같다 :

Theme.delete_all
Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222',
                      :component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000',
                      :join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF',
                      :cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true)

Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF',
                      :component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF',
                      :join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000',
                      :cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true)

Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', :title_text_color=>'0x000374',
                      :component_theme_color=>'0x000374', :carrier_select_color=>'0x4357FF', :label_text_color=>'0x000000',
                      :join_upper_gradient=>'0x4357FF', :join_lower_gradient=>'0xffffff', :join_text_color=>'0x000000',
                      :cancel_link_color=>'0xffffff', :border_color=>'0x666666', :carrier_text_color=>'0x000000', :public => true)
puts "Success: Theme data loaded"

여기에 생각이 나는 사용자가 시작하는 일부 재고 테마를 설치할 것입니다. 나는이 방법에 문제가있다.

ID를 설정하면 작동하지 않습니다. 내가 테마를 추가하기로 결정하는 경우의이 고정 파일에 테마 문을 추가하고 데이터베이스를 다시 시드 레이크 작업을 호출 한 후 나는 것 간단히처럼, '레드'를 호출 할 수 있음이 의미합니다. 내가 그렇게 할 경우 테마가 다른 객체와이 재 초기화에 따라 자신의 ID의 변화에 ​​속해 있기 때문에, 모든 링크가 끊어집니다.

내 질문이 우선이며,이 데이터베이스를 뿌리기 처리 할 수있는 좋은 방법입니다? 이전 포스트에서, 이것은 나에게 추천했다.

그렇다면, 어떻게 하드 코드 ID 및 그 어떤 단점이있다 할 수 있습니까?

그렇지 않은 경우, 데이터베이스를 시드하는 가장 좋은 방법은 무엇입니까?

나는 정말 오랫동안 평가하고 모범 사례를 통합 답변을 생각합니다.

해결법

  1. ==============================

    1.(일부는 여전히 적용되지만)이 답변은 약간 구식이되기 때문에 업데이트.

    (일부는 여전히 적용되지만)이 답변은 약간 구식이되기 때문에 업데이트.

    레일 2.3.4, DB / seeds.rb에 추가 간단한 기능

    새로운 레이크 작업을 제공합니다

    rake db:seed
    

    등 국가, 국가와 같은 일반적인 정적 기록을 채우기위한 좋은 ...

    http://railscasts.com/episodes/179-seed-data

    시드 작업을합니다 (railscast 에피소드에서) 당신의 seeds.rb 파일에 다음을 넣어 : 이미도 DB로 채울를 생성 한 경우 비품을 사용할 수 있습니다 * 참고 :

    require 'active_record/fixtures'
    Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "operating_systems")
    

    대신 '기구'상수의 레일 3.x를 사용하는 '액티브 :: 설비'에 대한

    require 'active_record/fixtures'
    ActiveRecord::Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "fixtures_file_name")
    
  2. ==============================

    2.일반적으로 필요한 종자 데이터의 2 종류가 있습니다.

    일반적으로 필요한 종자 데이터의 2 종류가 있습니다.

    내 경험에 난 항상 데이터의 두 가지 유형의 필요성을 가로 질러오고 있었다. 나는 함께 레일 '씨앗을 확장하고 dB / 씨앗 / ENV 예를 들어 DB / 씨앗 / 개발 dB / 씨앗 / 및 환경 종자 데이터에서 여러 공통의 씨앗 파일을 추가 할 수있는 작은 보석을 넣어 그래서.

    나는이 방법이 어떤 구조 내 종자 데이터를 제공하기에 충분 그냥 실행하여 설치 나에게 알려진 상태에서 내 개발 또는 스테이징 환경을 능력을 제공합니다 발견했습니다 :

    rake db:setup
    

    설비는 일반 SQL 덤프 있으며, 유지 보수가 허약하고 flakey이다.

  3. ==============================

    3.좋아 factory_bot 소리는 당신이 달성하려고하는 일을 할 것입니다. 당신은 기본 정의에있는 모든 일반 속성을 정의하고 생성 시간에 그들을 대체 할 수 있습니다. 또한 공장에 ID를 전달할 수 있습니다 :

    좋아 factory_bot 소리는 당신이 달성하려고하는 일을 할 것입니다. 당신은 기본 정의에있는 모든 일반 속성을 정의하고 생성 시간에 그들을 대체 할 수 있습니다. 또한 공장에 ID를 전달할 수 있습니다 :

    Factory.define :theme do |t|
      t.background_color '0x000000'
      t.title_text_color '0x000000',
      t.component_theme_color '0x000000'
      t.carrier_select_color '0x000000'
      t.label_text_color '0x000000',
      t.join_upper_gradient '0x000000'
      t.join_lower_gradient '0x000000'
      t.join_text_color '0x000000',
      t.cancel_link_color '0x000000'
      t.border_color '0x000000'
      t.carrier_text_color '0x000000'
      t.public true
    end
    
    Factory(:theme, :id => 1, :name => "Lite", :background_color => '0xC7FFD5')
    Factory(:theme, :id => 2, :name => "Metallic", :background_color => '0xC7FFD5')
    Factory(:theme, :id => 3, :name => "Blues", :background_color => '0x0060EC')
    

    위조자와 함께 사용하면 그것은기구 (우웩)에 대해 엉망으로하지 않고 정말 빠르게 협회와 데이터베이스를 채울 수 있습니다.

    나는 레이크 작업이 같은 코드가 있습니다.

    100.times do
        Factory(:company, :address => Factory(:address), :employees => [Factory(:employee)])
    end
    
  4. ==============================

    4.seeds.rb 파일이나 FactoryBot을 사용하는 것은 매우 중요하지만, 이들은 각각 고정 된 데이터 구조 및 테스트를 위해 중대하다.

    seeds.rb 파일이나 FactoryBot을 사용하는 것은 매우 중요하지만, 이들은 각각 고정 된 데이터 구조 및 테스트를 위해 중대하다.

    seedbank 보석은 당신에게 당신의 씨앗에 더 제어 및 모듈화를 줄 수 있습니다. 그것은 레이크 작업을 삽입하고 당신은 또한 당신의 씨 사이에 종속성을 정의 할 수 있습니다. 이러한 추가를해야합니다 귀하의 레이크 작업 목록 (예를 들어)

    rake db:seed                    # Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/ENVIRONMENT/*.seeds.rb. ENVIRONMENT is the current environment in Rails.env.
    rake db:seed:bar                # Load the seed data from db/seeds/bar.seeds.rb
    rake db:seed:common             # Load the seed data from db/seeds.rb and db/seeds/*.seeds.rb.
    rake db:seed:development        # Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/development/*.seeds.rb.
    rake db:seed:development:users  # Load the seed data from db/seeds/development/users.seeds.rb
    rake db:seed:foo                # Load the seed data from db/seeds/foo.seeds.rb
    rake db:seed:original           # Load the seed data from db/seeds.rb
    
  5. ==============================

    5.여기에 설명 된대로 레일은 시드 데이터 방식으로 구축했다.

    여기에 설명 된대로 레일은 시드 데이터 방식으로 구축했다.

    seedbank : 또 다른 방법은 고급 또는 쉽게 같은 시드에 보석을 사용하는 것입니다.

    이 보석과 그것을 사용하는 이유의 가장 큰 장점은 같은 데이터 로딩 의존성 등의 환경 종자 데이터 고급 기능을 가지고 있다는 것입니다.

    이 답변은 구글에 처음으로 날짜 대답에까지 추가.

  6. ==============================

    6.그들은 업데이트 할 방법 모두가 그것을 얻을 것을, 데이터베이스 마이그레이션에 추가합니다. 당신이 명시 적 ID 설정을 엉망으로하지 않아도되도록 루비에 모든 로직을 핸들 / 코드 레일.

    그들은 업데이트 할 방법 모두가 그것을 얻을 것을, 데이터베이스 마이그레이션에 추가합니다. 당신이 명시 적 ID 설정을 엉망으로하지 않아도되도록 루비에 모든 로직을 핸들 / 코드 레일.

  7. ==============================

    7.가장 좋은 방법은 사용하는기구이다.

    가장 좋은 방법은 사용하는기구이다.

    참고 : 보관할기구가 직접 삽입을하고 당신이 해결 방법을 찾아야합니다 데이터 채우기 것을 콜백이있는 경우 귀하의 모델을 사용하지 않는 것이 마음이다.

  8. from https://stackoverflow.com/questions/761123/what-is-the-best-way-to-seed-a-database-in-rails by cc-by-sa and MIT license