2011-12-29 47 views
9

Tôi gặp sự cố khi có nhiều ứng dụng cố gắng ghi đè cùng một lệnh quản lý trong dự án Django.Xử lý nhiều ứng dụng ghi đè các lệnh quản lý trong Django

  1. Có cách nào hợp lý để giải quyết vấn đề này không?
  2. Được ưu tiên - ứng dụng được xác định trước tiên trong INSTALLED_APPS hoặc ứng dụng được xác định trước?
  3. Có thể phân lớp hiệu quả lệnh quản lý được xác định gần đây nhất thay vì chỉ đơn giản là thay thế nó?

Đối với bối cảnh Tôi đang cố gắng để có được django_pdb (xem github) làm việc độc đáo hơn với southdjango.contrib.staticfiles.

+2

Tại sao bạn đổi tên các lệnh quản lý hiện có? Làm ơn đừng làm thế. Vui lòng cung cấp tên duy nhất cho lệnh của bạn và tránh sự cố này. –

+5

Tôi nghĩ rằng đó là một điều khá hợp lý muốn làm cho bối cảnh. (Thêm các tùy chọn --pdb vào các lệnh kiểm tra hiện có và các lệnh máy chủ lưu trữ) Các ứng dụng như 'south' và' django.contrib.staticfiles' thực hiện chính xác điều đó, vì vậy tôi không được bán trên một tấm chăn "không làm điều đó". –

+0

@SLOTT nếu mã hoàn toàn trong kiểm soát của nhà phát triển, đây là một câu hỏi rất ngớ ngẩn - bạn chỉ cần đổi tên một trong số chúng. Tôi nghĩ anh ấy đang cố gắng yêu cầu phải làm gì khi bạn sử dụng hai ứng dụng cộng đồng mà cả hai đều cung cấp các lệnh "load_sample_data". – Ted

Trả lời

1

Câu trả lời dễ nhất Tôi biết là: cấu trúc dự án của bạn để bạn có thể thay đổi một trong số chúng và lưu giữ các thay đổi để bạn có thể áp dụng nó cho các bản phát hành trong tương lai.

Đối với dự án của tôi, tôi muốn có:

/myproject 
    /lib 
    /app1 
    /app2 
    /app3 

Sau đó thêm một cách rõ ràng/lib vào đường dẫn trong setup.py

import os 
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__)) 

import sys 
lib_dir = os.path.join(PROJECT_PATH, 'lib') 
if lib_dir not in sys.path[:4]: 
    sys.path.insert(1, os.path.join(PROJECT_PATH, 'lib')) 

Tôi có lẽ nhiều khả năng hơn mức trung bình để có một ứng dụng, cài đặt nó, sau đó thay đổi 10% của nó để làm việc chính xác như thế nào tôi muốn.

Lợi thế của việc này là: 1) hầu hết các phụ thuộc gửi mã và được theo dõi trong GIT 2) không có cơ hội thay đổi hệ thống bất ngờ gây ra lỗi trong ứng dụng nếu bạn đang chạy nhiều ứng dụng từ cùng một máy và 3) Dễ dàng thay đổi, với lịch sử sửa đổi, bất kỳ và tất cả mọi thứ trong ứng dụng.

Không có chim bồ câu quá sâu vào các lệnh quản lý của miền nam và không bao giờ sử dụng django_pdb, vấn đề cụ thể của bạn có thể không được giải quyết bằng cách "tạo bản sao cục bộ và đổi tên một trong số chúng", nhưng tôi chia sẻ trong trường hợp có thể.

+0

Cảm ơn bạn đã đề xuất. Điều đó có thể tốt nếu bạn đang làm việc trên một dự án riêng lẻ, nhưng nó không giúp ích nếu bạn viết một ứng dụng có thể tái sử dụng mà bạn muốn người khác cài đặt. (Chẳng hạn như trong trường hợp sử dụng của tôi) –

3

2,5 năm sau, nhưng trong trường hợp ai đó có cùng sự cố và hạ cánh tại đây sau khi tìm kiếm trên google, tôi đã tạo một ứng dụng django nhỏ để xử lý trường hợp đó: django-mcmo ('Command Multiple Override'), có sẵn trên pypi. Nó có những hạn chế nhưng hoạt động như mong đợi.

Làm việc với django 1,4 đến 1,8 và py 2 và 3, đóng góp chào mừng trên bitbucket repo.

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