2010-02-19 6 views
1

rake db : seed를 사용하여 실행되는 종자가있는 레일 프로젝트가 있습니다. 형태의 projects.yml이 프로젝트의 SQL 테이블에서yml 파일이있는 Rails DB 시드는 기존 레코드를 제거하고 다시 추가하는 경우가 있습니다. 뭐라 구요?

project_name1: 
    property: value 

project_name2: 
    property: value 

Fixtures.create_fixtures("db/seeds","projects") 

있습니다 : 차례 차례로 이것은 같은 것을 실행 dB/씨앗 디렉토리에 RB 파일을로드 기존 프로젝트 기록입니다. YML 파일의 일부 파일은 새 파일이고 다른 파일은 그렇지 않습니다. 나는 며칠 동안 DB 씨앗을 돌 보았고 프로젝트 ID가 일부으로 바뀌 었습니다. 그러나 YML 파일에 모두있는 경우에도 ID를 변경하지 않은 파일은 복제되지 않습니다. 그래서 일부 레코드는 괜찮 았고, 다른 레코드는 제거하고 새 ID로 다시 추가합니다 (또는 ID를 완전히 업데이트하고 어떤 것인지를 모르는 경우).

갑자기 멈추었습니다. 기존 데이터베이스를 삭제하고 다시로드 (SQL 덤프를 사용하여 깨끗하고 변경되지 않은 상태로 되돌리기)하지만 DB 종자는 기존 데이터를 그대로두고 새 데이터를 추가합니다 (모든 데이터가 yml 파일에 있음에도 불구하고) 기존 ID를 건드리지 않고

갑자기 다시, 그것을 다시 시작했다. 나는 씨앗, 기존 데이터 시드 및 신분증을 업데이트하지 않고 2 주 동안 구글을 검색했다.

어떤 도움도 물론 높이 평가됩니다.

답변

0

약간 다른 접근 방식을 사용했지만 일관되게 작동했습니다. project.yml 파일을 사용하는 대신 필자는 작성한 db/seed_data/폴더에 배치 된 파이프 구분 문자 파일에 시드 데이터를로드 한 다음 find_or_create_by를 사용하여 데이터를로드하여 기존 데이터를 덮어 쓰지 않았습니다.

seed.rb 

    directory = "db/seed_data/" 

# Pre-load 
    path = File.join(directory, "projects.txt") 
    open(path) do |projects| 
    projects.read.each_line do |project| 
     name, owner = school.chomp.split("|") 
     Project.find_or_create_by_name_and_owner!(name, owner) 
    end 
    end 

---------------- 

projects.txt 

Project A|admin 
Project B|user1 
Project C|admin 
...