2012-07-23 26 views
7

Tài liệu django rõ ràng nêu rõTại sao không nên thay đổi cài đặt django khi chạy?

Bạn không nên thay đổi cài đặt trong ứng dụng của mình khi chạy.

Đây là

câu hỏi link to that statement của tôi là, tại sao lại như vậy? Tôi muốn thêm các ứng dụng động vào thời gian chạy và thêm cơ sở dữ liệu khi chạy, cả hai đều liên quan đến việc chỉnh sửa các thiết lập. Ai đó có thể giải thích lý do tại sao cài đặt không được chỉnh sửa trong thời gian chạy và nếu ngoại lệ tồn tại, chúng là gì và tại sao chúng là ngoại lệ? Tôi không quan tâm nhiều đến cách đạt được mục tiêu của mình, nhưng vì lý do tại sao không nên thay đổi cài đặt.

+0

Tôi đã xem https://docs.djangoproject.com/en/dev/ref/settings/, và dường như với tôi đây là tất cả các cài đặt áp dụng khi khởi động ứng dụng *. Do đó, nó sẽ không có ý nghĩa nhiều khi sửa đổi chúng khi chạy. –

Trả lời

5

Hầu hết các cài đặt sẽ không được đọc lại nếu bạn thay đổi chúng khi chạy. Vì vậy, Django sẽ không nhận ra những thay đổi bạn thực hiện.

Điều này là do thực tế là Django chỉ là mã Python bình thường. Nó không giống như một máy chủ đang theo dõi mã của bạn - nó chỉ là một phần của mã của bạn.

Trong một số trường hợp, các phần của mã Django có thể phản hồi các thay đổi trong cài đặt, vì chúng có thể thực hiện 'cài đặt.DEFAULT_FROM_EMAIL' mỗi lần gửi thư, chẳng hạn.

Nhưng nếu Django xử lý cài đặt theo bất kỳ cách nào, giống như nó phải làm cho INSTALLED_APPS, nó sẽ không thông báo bạn đã thay đổi gì đó và thực hiện lại quá trình xử lý.

Cài đặt nào an toàn? Vâng, các tài liệu đang nói "không ai được an toàn", bởi vì nó có thể thay đổi trong tương lai. Django có thể lưu một bản sao của bất kỳ cài đặt nào vì một số lý do, hoặc thực hiện một số xử lý.

Thay đổi INSTALLED_APPS không bao giờ có thể được thực hiện để làm việc, bởi vì nó thay đổi mô-đun nào được nhập. Đơn giản là không có cách nào mà Django có thể làm việc xung quanh cách Python hoạt động ở cấp độ này - nó sẽ cần phải có khả năng 'unimport' module, mà về cơ bản là không thể (cách duy nhất là khởi động lại quá trình), và có khác các sự cố liên quan đến liên kết ứng dụng chéo.

1

AFAIK không có tài liệu về cài đặt nào có thể sửa đổi một cách an toàn trong thời gian chạy, nhưng có open ticket yêu cầu chúng được ghi rõ ràng hơn.

+0

Biến số cài đặt của riêng mình như thế nào? ví dụ. tạo một từ điển trống trong cài đặt và thêm dữ liệu vào trong khoảng thời gian hệ thống đang chạy (trong trường hợp này, nó không liên quan nếu dữ liệu bị mất khi khởi động lại hệ thống). – Derek

1

Nếu bạn chụp look under the hood tại đối tượng cài đặt Django cho thấy giao diện với mô-đun cài đặt của dự án, bạn sẽ nhận thấy rằng không có gì ngăn bạn thay đổi cài đặt theo thời gian. Tuy nhiên, bạn nên đánh giá cao kiến ​​trúc của khung công tác được xây dựng xung quanh luồng yêu cầu phản hồi, nơi rất nhiều trạng thái toàn cầu đang được chia sẻ giữa các chủ đề để tối ưu hóa bộ nhớ, dựa trên tiền đề rằng ứng dụng được cấu hình chỉ một lần trong quá trình khởi tạo .

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