2009-06-17 45 views
6

Tôi muốn phân phát các nguồn cấp dữ liệu RSS chuyên biệt trên tên miền phụ khác từ phần còn lại của trang web."khung trang web" trên một cá thể django duy nhất

Tôi có thể sử dụng khung trang web để sử dụng một tệp urls.py và settings.py khác nhau trong một cá thể django duy nhất. hoặc tôi cần phải thiết lập hai địa điểm apache và chỉ cần thiết lập các tập tin settings.py khác nhau trong conf apache.

Lý do tôi cần thiết lập hai tệp urls.py là tránh nội dung trùng lặp. Tôi không muốn trang web chính có sẵn tại rss.example.com và tôi không muốn các nguồn cấp dữ liệu chuyên biệt có thể truy cập được trên example.com

Phục vụ chúng từ một cá thể django đơn sẽ là lý tưởng vì chúng tôi ' lại trên chia sẻ lưu trữ với bộ nhớ hạn chế, và nó có vẻ như một sự lãng phí để có một trường hợp mở mà chỉ phục vụ lên rss.

chỉnh sửa: Tôi kết luận rằng nhiều trường hợp với các tập tin urls.py riêng biệt sẽ dễ dàng nhất đối với tôi ... nhưng tôi tìm thấy bài viết này mô tả làm thế nào để làm điều đó bằng cách sử dụng trường hợp duy nhất:

http://effbot.org/zone/django-multihost.htm

Giải pháp: Django tupperware

Tôi đã kết thúc viết một khuôn khổ để chạy nhiều bản sao của trang web trên một cá thể django.

Ý tưởng cơ bản là thay đổi cài đặt SITE_ID khi đang di chuyển cho từng yêu cầu và tải cài đặt thay thế từ cơ sở dữ liệu. Nó thực hiện điều này dựa trên tên miền và sử dụng SITE_ID = 1 theo mặc định (khi nó không thể tìm thấy bất cứ điều gì)

Tất cả các cài đặt trong tập tin settings.py được ghi đè bởi các cài đặt được lưu trữ trong cơ sở dữ liệu cho trang hiện tại.

Nó hoạt động khá tốt :) và nó đang chạy trong sản xuất tại http://rootbuzz.com

+0

Bạn vẫn sử dụng tupperware? Hay bạn tìm thấy bất kỳ lựa chọn thay thế tốt hơn và tươi mới? –

+0

@MuratCorlu Tupperware vẫn đang được sử dụng trong dự án đó :) – Jiaaro

+0

Tôi đã cố gắng sử dụng nó với Django 1.7 nhưng nó không hoạt động như mong đợi. Ngoài ra dự án dường như đã chết trên Bitbucket. Bạn có thể chia sẻ một cấu hình ví dụ về cách bạn sử dụng phần mềm tupperware không? –

Trả lời

10

Với chứng khoán Django bạn phải có một độc đáo settings.py cho mỗi trang web ... vì SITE_ID được định nghĩa trong settings.py và là chìa khóa cho trang web nào đang xử lý yêu cầu này.

Nói cách khác, SITE_ID là toàn cầu đối với cá thể của bạn và do đó bạn cần một cá thể cho mỗi trang web.

Bạn có thể có một phổ biến urls.py nếu bạn muốn bởi vì không có gì ngăn cản bạn sử dụng cùng một ROOT_URLCONF trong tất cả các trang web của bạn settings.py tệp ... hoặc bạn có thể có một khác biệt cho mỗi trang web. Trong trường hợp này, bạn sẽ muốn bao gồm các URL phụ để ngăn tự lặp lại cho bất kỳ URL phổ biến nào.

Có ít nhất hai phương pháp bạn có thể thử để phục vụ từ một trường hợp duy nhất:

  1. Sử dụng apache + mod_wsgi và sử dụng WSGIApplicationGroup và/hoặc WSGIProcessGroup chỉ thị. Tôi chưa bao giờ cần những thứ này trước đây vì vậy không thể hoàn toàn chắc chắn rằng chúng sẽ hoạt động theo cách bạn muốn, nhưng bất kể bạn chắc chắn có thể sử dụng mod_wsgi trong chế độ daemon để cải thiện đáng kể dung lượng bộ nhớ của bạn.

  2. Bạn có thể chơi với phần mềm trung gian Django để từ chối/cho phép URL dựa trên tên máy chủ yêu cầu (xem HttpRequest.get_host() trong tài liệu Django). Cho rằng vấn đề, mặc dù nó sẽ là một hit hiệu suất nhẹ, bạn có thể đặt một trang trí trên tất cả các quan điểm của bạn để kiểm tra các máy chủ lưu trữ đến.

+0

cảm ơn! đây chính xác là những gì tôi cần biết – Jiaaro

+0

Vì tên miền phụ này chỉ phục vụ các nguồn cấp dữ liệu RSS chuyên biệt, tôi sẽ đặt maxRequestsPerChild thành 1 để tiết kiệm RAM. Bất kỳ nhược điểm nào tôi cần biết (ngoài hình phạt tốc độ) – Jiaaro

+0

PS - Như bạn có thể thấy tôi vừa quyết định tạo một ví dụ mới ... Tôi có FAR quá nhiều lượt xem để đặt trang trí trên mỗi đơn – Jiaaro

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