2010-10-23 44 views
18

Tôi có một ứng dụng Django. Tôi có tập tin cố định .json chứa dữ liệu thử nghiệm, với các bài kiểm tra đơn vị sử dụng dữ liệu để xác nhận ứng dụng đang hoạt động đúng cách. Tôi cũng sử dụng miền Nam để di chuyển cơ sở dữ liệu của mình.Di chuyển đồ đạc Django?

Sau khi thực hiện một vài lần di chuyển cơ sở dữ liệu, đồ đạc của tôi đã cũ, vì cơ sở dữ liệu đã di chuyển, thêm cột cơ sở dữ liệu mới, và dữ liệu lịch thi đấu không có cột đó, vì nó đã được chụp trước cơ sở dữ liệu đã thay đổi.

Cách tốt nhất để di chuyển đồ đạc của tôi về phía trước khi tôi di chuyển cơ sở dữ liệu của mình là gì?

Trả lời

12

Dưới đây là quá trình tôi đã sử dụng:

  1. cuộn lại mã để sửa đổi đã tạo ra vật cố ở nơi đầu tiên. Ví dụ: svn up -r12345.

  2. Rỗng cơ sở dữ liệu, sau đó tạo ra nó với manage.py syncdb --noinput --migrate

  3. tải các trận đấu với manage.py loaddata my_fixture.json

  4. cuộn mã về phía trước đến nay, với svn up

  5. Di chuyển cơ sở dữ liệu với manage.py migrate

  6. Dump dữ liệu với manage.py dumpdata --indent=2 myapp >my_fixture.json

Lưu ý rằng bạn cần phải cẩn thận khi chọn bản sửa đổi trước đó để quay lại. Trong trường hợp của tôi, tôi đã có một số bản sửa lỗi gần đây cần thiết, vì vậy tôi thực sự phải chọn và chọn các thư mục để quay lại các bản sửa đổi cụ thể. Tồi tệ, nhưng tốt hơn là chỉnh sửa bằng tay một tệp JSON 9.000 dòng.

Ngoài ra, ở bước 6, hãy chắc chắn đổ bộ ứng dụng chính xác.

Trong tương lai, khi tôi viết di chuyển, tôi có thể thực hiện lại các bước này để giữ tất cả các đồ đạc được cập nhật.

+1

Tôi đang ở một điểm tương tự mặc dù tôi chỉ mới bắt đầu, tìm cách để có một cách tiếp cận thử nghiệm đầu tiên. Toàn bộ 'rỗng cơ sở dữ liệu, tải các thử nghiệm vật cố định, di chuyển, đổ quá trình thử nghiệm thử nghiệm' là sẽ giết các công việc. Hy vọng rằng những người khác sẽ đề nghị (hoặc mã ;-)) một giải pháp thanh lịch hơn. –

+0

lưu ý rằng nếu bạn quay trở lại đầu tiên, bạn sẽ kết thúc với đồ đạc của thời gian đó. Điều đó có nghĩa là mọi thay đổi ở giữa sẽ bị loại bỏ. nếu mọi thứ được cập nhật theo cách thủ công, nó sẽ bị hủy, vì vậy tôi có xu hướng sao chép các đồ đạc ở một nơi khác, sau đó quay lại, tải các đồ đạc đã di chuyển, tua đi, di chuyển vv ... – MrE

-2

Cách tốt nhất để di chuyển đồ đạc của tôi về phía trước khi tôi di chuyển cơ sở dữ liệu của mình là gì?

Quá muộn.

Khi bạn di chuyển cơ sở dữ liệu, bạn cần loaddatadumpdata.

Một thiết bị ngừng hoạt động, đã quá muộn.

Dự phòng có thể là viết một tập lệnh ngắn để tải các đồ đạc JSON vào bộ nhớ, và sau đó "xây dựng các đối tượng cơ sở dữ liệu" theo cách thủ công.

with open("somefile.json", "r") as data: 
    for obj in json.load(data): 
     if obj['model'] == 'someapp.somemodel': 
      SomeNewModel.objects.create( 
       field = obj['fields']['element'] 
       ... 
       ) 

Với một cái gì đó dọc theo những dòng này, bạn có thể để xây dựng một cơ sở dữ liệu sử dụng lược đồ và di sản cố định hiện tại của bạn.

+3

Cảm ơn, nhưng tôi không tin là đã quá muộn. Tôi luôn có thể quay lại mã của tôi và/hoặc cơ sở dữ liệu của tôi về trạng thái trước đó, vì vậy tôi chắc chắn rằng tôi có thể quay lại đúng hướng. Bạn có thể cung cấp thêm một chút chi tiết về cách loaddata/dumpdata sẽ hoạt động không? Ví dụ, tôi cho rằng có sự di chuyển ở giữa. Nhưng nếu cố định của tôi chỉ dành cho một đơn xin, Nam sẽ biết cách áp dụng di cư như thế nào? –

+0

@Ned Batchelder: "Tôi luôn có thể quay lại mã của tôi và/hoặc cơ sở dữ liệu của tôi về trạng thái trước đó", trong khi đúng, quá phức tạp. Nó thực sự là quá muộn. Vui lòng đọc phần này cho loaddata và dumpdata: http://docs.djangoproject.com/en/dev/ref/django-admin/. –

+3

Nó sẽ là một tính năng sát thủ cho miền Nam nếu nó cũng di chuyển đồ đạc. –

1

Tại sao bạn không thể tạo một tệp .json mới từ db của mình. Đây là những gì tôi làm khi tôi cần tạo một vật cố định mới.

python manage.py dumpdata <your_app> auth > test_data.json 
+0

Bởi vì dữ liệu thử nghiệm của tôi là một mẫu được kiểm soát, không chỉ đơn giản là ảnh chụp nhanh mới nhất của cơ sở dữ liệu sản xuất của tôi. –

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