2012-04-27 32 views
7

Tôi đang cố gắng kết xuất dữ liệu từ máy chủ sản xuất của mình để sử dụng làm thử nghiệm trên máy chủ dev của mình, nhưng tôi gặp lỗi khi chạy "./manage.py test" trên máy chủ dev chỉ định tệp cố định được tạo trên máy chủ prod.đồ đạc django (từ dumpdata) không thành công khi thử nghiệm

Dưới đây là những cố gắng tôi thực hiện dựa trên google tìm kiếm/stackoverflow:

# python manage.py dumpdata --indent=4 --natural 
error when running tests: IntegrityError: (1062, "Duplicate entry 'cms-agencies' for key 'app_label'") 

# python manage.py dumpdata --exclude contenttypes --indent=4 
error when running tests: IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_current`.`django_admin_log`, CONSTRAINT `content_type_id_refs_id_288599e6` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`))') 

# python manage.py dumpdata --exclude contenttypes --natural --indent=4 
error when running tests: IntegrityError: (1062, "Duplicate entry '14-add_agencies' for key 'content_type_id'") 

# python manage.py dumpdata --exclude contenttypes --exclude auth --indent=4 
error when running tests: IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_current`.`django_admin_log`, CONSTRAINT `user_id_refs_id_c8665aa` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))') 

# python manage.py dumpdata --exclude contenttypes --exclude auth --natural --indent=4 
error when running tests: IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_current_abril`.`django_admin_log`, CONSTRAINT `user_id_refs_id_c8665aa` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))') 

Tôi cũng đã cố gắng loại bỏ " 'init_command': 'SET storage_engine = InnoDB" từ settings.py và vẫn nhận được 1.062 lỗi.

Tôi không hiểu vấn đề này. Không nên django chỉ cần tạo lại DB chính xác như nó đã được trên máy chủ prod khi tôi tải các đồ đạc?

+0

đồng ý, sẽ thích một tùy chọn để thực hiện một bản sao chính xác của db –

Trả lời

1

Tôi tin rằng các lỗi đang cho bạn biết chính xác những gì đang xảy ra. app_label có độc đáo không? Tôi đoán là vậy. Tôi nghĩ bạn có hai đối tượng với cùng giá trị khóa app_label. (cms-agencies)

Ngoài ra khi bạn có mối quan hệ khóa ngoại, bạn cần phải có đối tượng tương ứng với khóa ngoại. Dữ liệu gộp không làm điều này bởi vì nó chỉ đổ một mô hình.

Giống như https://github.com/davedash/django-fixture-magic là điều tuyệt vời cho việc này. Nó đổ mô hình của bạn VÀ tất cả phụ thuộc fk.

+2

Trong lịch thi đấu, có. Những gì tôi đoán đang xảy ra là django thêm một số dữ liệu vào DB (của các mô hình riêng của nó), và sau đó nó xung đột với các vật cố – Lem0n

10

Tôi đã có vấn đề tương tự và những args làm việc cho tôi:

python manage.py dumpdata --natural --exclude auth.permission --exclude contenttypes --indent 4 

Tôi cũng đã có rất nhiều vấn đề với các tín hiệu post_save tạo các đối tượng hai lần. Có một sửa chữa cho điều đó: How do I prevent fixtures from conflicting with django post_save signal code?

+1

Cảm ơn! '--natural' đã bị hủy trong Django 1.9, thay thế là' - tự nhiên-nước ngoài'. Xem [tài liệu] (https://docs.djangoproject.com/en/1.11/ref/django-admin/#dumpdata) để biết chi tiết. – mhkuu

0

vấn đề của bạn có thể là bạn đã bán ra tệp unicode nhưng django mong đợi định dạng tệp ascii khi tải. Điều này sẽ xảy ra khi sử dụng PowerShell trên Windows nếu điều đó áp dụng cho bạn.

1

Vấn đề là, nếu bạn sử dụng khóa tự nhiên (khóa tự nhiên-nước ngoài trong các phiên bản sau của Django), Django sẽ thực sự lưu trữ nhiều mối quan hệ bên trong đối tượng cha mẹ. Đó là điều bạn muốn. Nhưng sau đó bạn không thể đơn giản đổ tất cả các bảng, bạn không được bao gồm nhiều bảng/mô hình trong kết xuất của bạn khi bạn sẽ tải cùng một dữ liệu hai lần - và bùng nổ, trùng lặp và IntegrityErrors.

Ví dụ, bạn nên đổ auth.Userauth.Group, nhưng không auth.User_Groups. Nhìn vào ví dụ về một bãi chứa từ Django 1.7:

dòng
{ 
    "model": "auth.group", 
    "fields": { 
     "permissions": [], 
     "name": "ST" 
    }, 
}, 
{ 
    "model": "auth.group", 
    "fields": { 
     "permissions": [], 
     "name": "property_manager" 
    }, 
}, 

{ 
    "model": "auth.user", 
    "fields": { 
     "username": "boss", 
     "groups": [ 
      ["property_manager"],["ST"], 
     ], 
     "user_permissions": [], 
    }, 
}, 

Tiếp theo tạo ra một bãi chứa toàn diện của người sử dụng/quyền và các loại nội dung mà bạn có thể di chuyển để dev để có được bản sao giống hệt nhau, trong đó có trật tự liên tiếp giống hệt nhau và khóa chính (thử nghiệm trên Django 1.7):

python manage.py dumpdata auth.User auth.Group contenttypes auth.Permission --indent 4 --natural-foreign > users.json 
Các vấn đề liên quan