2012-02-02 2 views
3

마이그레이션을 위해 Django와 South를 사용하는 프로젝트에서 작업하고 있습니다. 일부 환경 (개발, 데모)에서는 데이터베이스를 채우는 데 사용되지만 일부는 생산 (생산)에서 사용하지 않는 비품을 설정하고 싶습니다. 예를 들어 UI 개발자가 작업중인 인터페이스에서 작업 할 항목이 있거나 시스템 관리자가 수동으로 설정하지 않고도 프로젝트 관리자 용 데모를 신속하게 수행 할 수 있도록 시스템에 데이터가 있어야합니다. 관리 인터페이스.환경 (개발, 통합, 생산)에 기반한 Django South로드 픽스처

자동화 된 테스트 픽스쳐를 일반 픽스쳐와 분리하는 방법을 많이 찾았지만 환경에 따라 픽스처를로드하는 방법에 대해서는 아무 것도 찾을 수 없었습니다. 이게 가능한가, 아니면 사람들이 내가 바라 보는이 문제를 해결하는 또 다른 방법인가?

답변

2

initial_data에 대해 할 수있는 일이별로 없습니다. 그러나, 나는 어쨌든 최적의 유틸리티보다 적다고 항상 느꼈습니다. 드물게 syncdb 또는 migrate을 호출 할 때마다 동일한 조명기를 반복해서 적용하기를 원하십니까? 당신은 몇 가지 다른 이름기구를 사용하는 경우

, 당신은 쉽게 모든 당신이 필요로하는, 그래서 정말

from django.core.management import call_command 
call_command("loaddata", "my_fixture.json") 

합니다 (South docs에서) 당신의 앞으로의 마이그레이션에 다음을 추가하여 귀하의 마이그레이션을 실행 될 수 있습니다 특정 환경에서만이를 수행 할 수있는 방법입니다. dev의 경우 가장 쉬운 방법은 DEBUG에 의존하는 것입니다. 그래서, 이전 코드가된다 : 당신이 더 많은 제어가 필요한 경우

from django.conf import settings 
from django.core.management import call_command 
if settings.DEBUG: 
    call_command("loaddata", "dev_fixture.json") 

, 당신은 다른 것입니다 설정 어떤 종류의 각 local_settings.py (또는 환경에 따라 설정을 사용자 정의하는 데 사용하는 어떤 방법) 만들 수 있습니다. 예 :

# local_settings.py 
ENV = 'staging' 

# migration 
from django.conf import settings 
from django.core.management import call_command 
if settings.ENV == 'staging': 
    call_command("loaddata", "staging_fixture.json") 
+0

위대한 답변! 구식 비품을 어떻게 처리합니까? 당신은 마이그레이션과 마찬가지로 취급합니까? 따라서 픽스쳐 로딩이 3 번이고 10 번 마이그레이션이 완료되면 픽스쳐는 오래된 것입니다. 그런 다음 마이그레이션 # 14가 될 새로운 조명기를로드하는 새로운 마이그레이션을 추가합니까? – jawilmont

+0

설비는 본질적으로 순간 형 스냅 샷입니다. 마이그레이션으로 인해 데이터베이스가 변경되면 어쨌든 더 이상 작동하지 않을 가능성이 높습니다. 그래서, 네가 새로운 마이그레이션을 만들고이 마이그레이션을위한 특정 설비를 필요로한다면, DB의 현재 상태를 기반으로 새로운 조명기를 간단하게 만들어야한다고 말할 수 있습니다. –