2010-07-12 26 views
8

मैं केवल एक ही डोमेन नाम का उपयोग कर एक ही सर्वर पर एकाधिक पूरी तरह से अलग Django परियोजनाओं को स्थापित करने का एक अच्छा तरीका ढूंढ रहा हूं। मुद्दा यह है कि मैं की तरह कुछ करने के लिए ब्राउज़ करना चाहते है:एक डोमेन पर django के कई उदाहरण

http://192.168.0.1/gallery/ # एक Django फोटो गैलरी परियोजना
http://192.168.0.1/blog/ # एक ब्लॉगिंग परियोजना

इस तरह, मैं विकसित करने और एक ही सर्वर पर कई Django परियोजनाओं का परीक्षण कर सकते बस विभिन्न यूआरएल का जिक्र करते हुए। (ध्यान दें: मुझे नहीं लगता कि यह Django साइट्स मॉड्यूल वह है जिसे मैं ढूंढ रहा हूं क्योंकि परियोजनाओं को अलग होना आवश्यक है)। एक उदाहरण के रूप में, PHP प्रकार इस तरह से व्यवहार करता है क्योंकि मैं एक ही सर्वर पर php-gallery और phpmyadmin जैसे कुछ स्थापित कर सकता हूं, बस अलग-अलग यूआरएल पथों के साथ।

क्या किसी को अपाचे (किसी भी mod_python या mod_wsgi के साथ) का उपयोग कर एक सर्वर पर एकाधिक यूआरएल के तहत कई Django परियोजनाओं को सेट करने के तरीके के बारे में किसी भी अच्छे संसाधन के बारे में पता है? जिन चीजों को मैं जानने में दिलचस्पी लेता हूं, यह है कि apache.conf, संभावित वर्चुअलएन्व सेटअप कैसे सेट अप करें, और इसे समायोजित करने के लिए urls.py में परिवर्तन करें। अधिकांश Django परिनियोजन उदाहरण जो मैं देखता हूं वे एक डोमेन या उप डोमेन के लिए एक आवेदन के लिए हैं।
कोई सलाह बहुत सराहना की है।

धन्यवाद,
जो

उत्तर

15

मैं स्थितियों में, जहां मैं उप डोमेन का उपयोग नहीं कर सकता है में किया गया है, और जिस तरह Django के साथ इस संभाल करने के लिए वास्तव में बहुत सरल है।

अपनी सेटिंग्स फ़ाइल में सुंदर ज्यादा सब कुछ सिर्फ एक नियमित रूप से Django एप्लिकेशन तरह होगा, यह सुनिश्चित करते के अपवाद के साथ इन सेटिंग्स अपनी परियोजना पथ में शामिल हैं:

MEDIA_URL = 'http://192.168.0.1/gallery/media/' 
ADMIN_MEDIA_PREFIX = '/gallery/admin_media/' 
SESSION_COOKIE_PATH = '/gallery' 
LOGIN_REDIRECT_URL = '/gallery/' 
LOGIN_URL = '/gallery/accounts/login/' 
LOGOUT_URL = '/gallery/accounts/logout/' 

SESSION_COOKIE_PATH पर अपने सभी क्षुधा को रोकने के लिए महत्वपूर्ण है एक ही डोमेन एक दूसरे को कुकीज़ लिखने से।

ऊपर दिए गए निर्देशों Django पक्ष को शामिल करना चाहिए, लेकिन अभी भी वेब सर्वर साइड पर करने के लिए और अधिक काम है। अपने आप में यह समस्या का समाधान नहीं करता है, तो

WSGIScriptAlias /gallery /path/to/gallery/apache/gallery.wsgi 
Alias /gallery/media /path/to/gallery/media 
Alias /gallery/admin_media /path/to/gallery/venv/lib/python2.6/site-packages/django/contrib/admin/media 

आदि

+0

इस महान उदाहरण के लिए धन्यवाद। कुकी पथ के बारे में भी ध्यान दें! –

+0

मैं इस दृष्टिकोण का उपयोग कर एक प्रोजेक्ट चलाने में सक्षम था। –

+0

आप i18n_patterns के बारे में कैसे जाते हैं जो पैटर्न कोड को भाषा कोड तैयार करता है और इस प्रकार आपकी रूट यूआरएल/गैलरी / –

1

कई Django परियोजनाओं बनाओ, एक ही ऐप्लिकेशन (उदाहरण के लिए frontend) के साथ एक और Django के यूआरएल मैपिंग का उपयोग इस तरह कुछ करने के लिए:

from django.conf.urls.defaults import patterns, include 

urlpatterns = patterns('', 
    url(r'^/', include('myproj.frontend.urls') 
) 

मैं इस का उपयोग करें, और यह एक झटका के बिना आता है।

यदि आप इस तरह कुछ स्थापित करने के लिए एक पूर्ण ट्यूटोरियल/walkthrough के लिए पूछ रहे हैं, तो मुझे खेद है कि मेरे पास यह नहीं है। मैं सिर्फ Django दस्तावेज के साथ पीछा किया और इसके साथ आया था।

1

एक दृष्टिकोण डेमॉन मोड में mod_wsgi के तहत चल रहे अपाचे में अनुप्रयोगों को तैनात करना है। दस्तावेज़ीकरण यहां पाया जा सकता है: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

+0

Daemon मोड: उदाहरण के लिए, यदि आप अपाचे का उपयोग + mod_wsgi आप सुनिश्चित करें कि प्रत्येक परियोजना के लिए अपने स्वयं WSGI स्क्रिप्ट है कि इस तरह भरी हुई है है बनाने की आवश्यकता होगी वे विभिन्न परियोजनाओं के बारे में बात कर रहे हैं। –

6

आपके प्रश्न में, आप projects और apps का उपयोग कर रहे हैं। उनका मतलब है Django में अलग चीजें। एक project में सेटअप फ़ाइल, डेटाबेस कॉन्फ़िगरेशन, और समग्र urlconf शामिल है, और यह है कि आप अपने डोमेन की जड़ पर क्या चाहते हैं। एक app कोड का एक व्यक्तिगत कार्यात्मक टुकड़ा है जो (आमतौर पर) एक कार्य करता है।

यदि आप एकाधिक ऐप्स को तैनात करना चाहते हैं, तो आप एक एकल प्रोजेक्ट बनाना चाहते हैं और प्रत्येक ऐप को प्रोजेक्ट निर्देशिका में कॉपी करना चाहते हैं। यदि आप ट्यूटोरियल देखते हैं, तो आप देखेंगे कि urlconf में ऐप कैसे शामिल करें। बस दोहराएं कि प्रत्येक के लिए, यह सुनिश्चित कर लें कि रेगेक्स सही हैं।

यहां मुख्य बिंदु यह है कि आपको अपने समग्र डीजेंगो प्रोजेक्ट के लिए अपाचे मिल रहा है, और फिर आप Django के आंतरिक urlconf का उपयोग करके सेट अप करने के लिए प्रत्येक ऐप को एक्सेस कर सकते हैं। एक ही यूआरएल की जड़ के नीचे कई परियोजनाओं को चलाने की कोशिश न करें - यह लगभग निश्चित रूप से एक संकेत है कि आप इसे गलत कर रहे हैं।

यदि आप एक ही डोमेन के तहत कई परियोजनाओं को चलाने का जिक्र कर रहे हैं, तो हम हल करते हैं कि यह समस्या सबडोमेन के साथ है।

Django परियोजनाओं हम निर्माण कर रहे हैं (आम तौर पर) डोमेन की जड़ में रहने के लिए जब वे वास्तव में तैनात कर रहे हैं, अगर आप app1.example.com और app2 आदि का उपयोग डिजाइन किए हैं के बाद से, जैसे आप की तैनाती की जाएगी आप परीक्षण कर सकते हैं, प्रत्येक डोमेन की जड़ में। आप सबडोमेन को ठीक उसी तरह कॉन्फ़िगर कर सकते हैं जैसे आप शीर्ष स्तरीय डोमेन कॉन्फ़िगर करेंगे, और फिर आपके अंतिम तैनाती पर जाकर आसान है।

आप वास्तव में है कि जैसे अनुप्रयोगों को तैनात करने की कोशिश कर रहे हैं, तो एक भी व्यापक Django परियोजना बनाने और urlconfs का उपयोग एक अलग उप यूआरएल पर प्रत्येक Django एप्लिकेशन शामिल करने के लिए।

+0

धन्यवाद पॉल। आप सही हैं, मैंने भ्रमित रूप से परियोजनाओं और ऐप्स का आदान-प्रदान किया था। मेरा मतलब था कि मैं सर्वर पर कई Django परियोजनाओं को तैनात करना चाहता हूं। गलतफहमी के लिए खेद है। इस तरह की उम्मीद थी कि एक ही सर्वर पर कई Django परियोजनाओं को तैनात करने का एक तरीका था जैसा कि कोई भी PHP के साथ ऐसा कर सकता है ... अनिवार्य रूप से उसी डोमेन के अंतर्गत एक नया यूआरएल पथ बना रहा है। मैं समझता हूं कि एक PHP के मैकेनिक्स एक सेटअप और एक Django सेटअप पूरी तरह से अलग हैं, लेकिन एक ही अंत परिणाम के लिए उम्मीद की तरह था: http://mydomain.com/project1/ http://mydomain.com/project2/। ...अधिक... –

+0

मैं सबडोमेन से बचने की उम्मीद कर रहा था, क्योंकि मैं बाह्य नेमसर्वर (DNS, होस्ट फ़ाइल) पर निर्भरता की आवश्यकता को खत्म करना चाहता हूं। यह सेटअप मेरे घर नेटवर्क पर एक परीक्षण वातावरण के रूप में अधिकतर उपयोगी होगा, केवल आईपी पते (कोई नाम सेवा नहीं चल रहा है), जहां मैं परीक्षण प्रयोजनों के लिए विकास के विभिन्न चरणों में शायद एक दर्जन या उससे अलग डीजेगो परियोजनाओं को स्थापित करूंगा। –

+2

रिकॉर्ड के लिए, एक ही डोमेन पर विशिष्ट यूआरएल पथों पर डीजेगो परियोजनाओं को एक साथ चलाने के लिए * संभव है, लेकिन यह सेट अप करने के लिए सुंदर नहीं है। –

2

के सीधे शब्दावली पर हो।

वेब पर आपके द्वारा देखे जाने वाले अधिकांश उदाहरण एक Django प्रोजेक्ट प्रति डोमेन के लिए हैं। प्रत्येक प्रोजेक्ट में कई एप्लिकेशन हो सकते हैं।

यहां से मुझे लगता है कि आप एक ही डोमेन पर कई परियोजना को तैनात करने का जिक्र कर रहे हैं। (अन्यथा - आपका प्रश्न शून्य हो गया है)।

यह आसानी से निर्देशिका प्रति उचित तैनाती (यह क्या तैनाती विधि का प्रयोग कर रहे पर निर्भर करता है) के साथ हल किया जा सकता, और यह सुनिश्चित अपने यूआरएल संभालने नहीं कर रहे हैं कि वे डोमेन जड़ पर मौजूद हैं।

+0

हां, मैं प्रति डोमेन एकाधिक परियोजनाओं को तैनात करने का जिक्र कर रहा हूं। गलतफहमी के लिए खेद है। आपकी प्रतिक्रिया –

3

दूसरों एक Django परियोजना के भीतर कई अनुप्रयोगों के उपयोग को कवर किया है। यदि आपका मतलब परियोजनाओं और/या प्रत्येक प्रोजेक्ट में केवल एक ही एप्लीकेशन है, तो सरल जवाब है कि mod_wsgi का उपयोग करते हुए प्रत्येक प्रोजेक्ट के लिए एक अलग WSGIScriptAlias ​​निर्देश का उपयोग करना है। इस तरह की प्रत्येक परियोजना को वैकल्पिक रूप से एक mod_wsgi डिमन प्रक्रिया समूह में सौंप दिया जा सकता है ताकि प्रत्येक अपाचे को पुनरारंभ किए बिना प्रत्येक को अलग से पुनरारंभ किया जा सके, लेकिन डिमन मोड एक अतिरिक्त चीज है जिसे समाधान किया जा सकता है और समाधान ही नहीं।

+0

के लिए धन्यवाद बहुत बढ़िया, मैं WSGIScriptAlias ​​निर्देश पर कुछ शोध करूंगा। सूचक के लिए धन्यवाद। –

संबंधित मुद्दे