2009-12-22 35 views
5

Tôi đang tìm một phương pháp an toàn kích hoạt DEBUG cho yêu cầu INTERNAL_IPS trên máy chủ sản xuất django mà không yêu cầu thay đổi tệp settings.py. Chủ yếu là để có được thanh công cụ đi cho một số nhà thiết kế để kiểm tra các vấn đề trên dữ liệu trực tiếp/phương tiện truyền thông, nhưng không dựa vào chúng để thiết lập lại các thiết lập một khi họ đã hoàn thành.Làm thế nào để kích hoạt django DEBUG trên một máy chủ sản xuất không xâm nhập

Tương tự như phương pháp này. hovever này chỉ phù hợp với triển khai.

http://nicksergeant.com/blog/django/automatically-setting-debug-your-django-app-based-server-hostname

trong thời gian qua trên các hệ điều php dựa Tôi đã có mydomain.com và một bản demo mydomaincom.myprodserver.com nơi miền prodserver có thể tự động chạy debug code dựa trên $ _SERVER [ 'HOST_NAME'] nhưng django thiếu superglobal dễ dàng. ví dụ trong tên máy chủ ví dụ blog là/etc/hostname không phải là vhost.

Bất kỳ ý tưởng nào được đánh giá cao.

Edit:

tôi có một giải pháp workaround các loại (nhưng lý tưởng tôi muốn một xách tay hơn) bằng cách thêm một/path/to/django_in_debug/đến sys.path của mydomaincom.myprodserver. com mục nhập vhost. Sau đó, trong tập tin settings.py

try: 
    from django_in_debug.settings import * 
except: 
    DEBUG = False 

Trả lời

9

Điều bạn đang yêu cầu làm phức tạp hơn một chút so với hình thức. Bạn muốn hiển thị thông tin gỡ lỗi cho một số INTERNAL_IPS nhất định đang diễn ra ở mức yêu cầu cấp. Tuy nhiên, bạn đang nói về settings.py ở cấp độ trang web .

Để đạt được điều này, bạn sẽ phải có settings.py được đánh giá lại cho mỗi yêu cầu, như bạn có thể nói có thể là một hướng rất xấu. Mỗi tài liệu riêng của Django, sửa đổi các thiết lập của trang web sau khi nó đã được tải là một không-không (để được công bằng người có được đi với điều này, nhưng nó không có giá trị gì lập trường chính thức của Django).

Đây là ý tưởng cho bạn:

Bạn có 2 tệp WSGI. Tệp WSGI đầu tiên trỏ tới settings.py chính của bạn và apache hướng lưu lượng truy cập từ www.yourdomain.com đến nó. Tệp WSGI thứ hai trỏ tới debug_settings.py và apache chuyển hướng lưu lượng truy cập từ debug.yourdomain.com đến nó. debug_settinsg.py trông giống như sau:

from settings import * 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

Từ đây bạn viết thành phần trung gian đơn giản để bẫy các yêu cầu đến. IP yêu cầu được so sánh với các cài đặt.INTERNAL_IPS và nếu một kết hợp được tìm thấy, yêu cầu sẽ được chuyển hướng đến debug.yourdomain.com.

Điều này cho phép bạn giữ 1 bản sao của trang web, nhưng thay đổi cài đặt cấp trang web dựa trên giá trị cấp yêu cầu.

+0

+1 Điều đặc biệt quan trọng là giữ DEBUG ra khỏi miền chính do Django lưu tất cả truy vấn cơ sở dữ liệu khi DEBUG = True ... ăn bộ nhớ nhanh. –

+0

cổ vũ, đây là giải pháp tốt hơn – michael

+0

Cũng có thể đáng để điều tra việc apache thực hiện chuyển hướng cho bạn thay vì phần mềm trung gian –

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