2012-06-25 16 views
10

मैं Django 1.4Django runserver कस्टम डेटाबेस

उपयोग कर रहा हूँ मैं विकास सर्वर शुरू करने की आवश्यकता है और मैं जो डेटाबेस के लिए इसका इस्तेमाल करना चाहिए (आदेश में) निर्दिष्ट करना चाहते हैं। उदाहरण के लिए अपनी सेटिंग्स शामिल है:

django-admin.py runserver --database=tests 

वहाँ कुछ इसी तरह है:

DATABASES = { 
    'default': { 
     'NAME': 'db.db', 
     'ENGINE': 'django.db.backends.sqlite3' 
    }, 
    'tests': { 
     'NAME': 'tests.db', 
     'ENGINE': 'django.db.backends.sqlite3' 
    }, 
} 

मैं की तरह कुछ का उपयोग करना चाहते हैं? मैं भी एक दूसरे की स्थापना फ़ाइल का उपयोग करने की कोशिश की लेकिन --settings विकल्प काम नहीं करता: (--settings विकल्प, पदावनत किया जा रहा है DOCS में कोई जिक्र नहीं बिल्कुल भी नहीं है)

django-admin.py runserver --settings=settings_tests 

या

django-admin.py runserver --settings settings_tests 

एक त्रुटि को जन्म देती है:

ImportError: Could not import settings 'settings_tests' (Is it on sys.path?): No module named settings_tests 

किसी भी मदद की बहुत सराहना की धन्यवाद,

Griffosx

उत्तर

8

मुझे पता चला कि सही आदेश Django 1.4 में कॉल करने के लिए किया जाता है:

django-admin.py runserver --settings=myproject.settings_tests 

Django डॉक्स में यह जानकारी कहां है?

अपने सभी प्रतिक्रिया

Griffosx

2

निम्नलिखित के साथ settings_tests.py बनाएँ:

from settings import * 

DATABASES = { 
    'default': { 
     'NAME': 'tests.db', 
     'ENGINE': 'django.db.backends.sqlite3' 
    }, 

} 

निष्पादित django-admin.py runserver --settings=settings_tests

+0

यह काम नहीं करता है। मैंने पहले से ही इस समाधान की कोशिश की है लेकिन यह ऊपर अपवाद उठाता है। मैं Django 1.4 – Griffosx

+0

का उपयोग कर रहा हूं आप अपवाद "नो मॉड्यूल" कैसे प्राप्त कर सकते हैं, आपने अभी उस मॉड्यूल को बनाया है? – vartec

+0

खैर, असल में त्रुटि 'आयात त्रुटि है: सेटिंग' सेटिंग्स_स्टेट्स 'आयात नहीं कर सका (क्या यह sys.path पर है?): सेटिंग नामक कोई मॉड्यूल नहीं है। मैंने रूट प्रोजेक्ट निर्देशिका में सेटिंग सेटिंग्स_test.py को पहले ही जोड़ा है (settings.py के समान स्तर पर)। त्रुटि _module_ के बारे में है _file _... – Griffosx

16

एक क्लीनर और कई config फ़ाइलें बनाने के लिए की तुलना में वातावरण चरों का उपयोग किया जाएगा विन्यास स्विच करने के लिए और अधिक विश्वसनीय तरीका है (देखें #3 of the twelve-factor app methodology इस्तेमाल किया Heroku और दूसरों द्वारा)। उदाहरण के लिए:

from os import environ 

DATABASES = { 
    'main': { 
     'NAME': 'db.db', 
     'ENGINE': 'django.db.backends.sqlite3' 
    }, 
    'tests': { 
     'NAME': 'tests.db', 
     'ENGINE': 'django.db.backends.sqlite3' 
    }, 
} 

default_database = environ.get('DJANGO_DATABASE', 'main') 
DATABASES['default'] = DATABASES[default_database] 

फिर आप DJANGO_DATABASE वातावरण चर सेट करके डिफ़ॉल्ट डेटाबेस बदल सकते हैं।

export DJANGO_DATABASE='tests' 
./manage.py runserver 

... या ...

DJANGO_DATABASE='tests' ./manage.py runserver 

तुम भी अजगर कोड का उपयोग कर वातावरण चर सेट कर सकते हैं।


संपादित करें: इस प्रक्रिया को आसान बनाने के लिए, केनेथ रीट्ज dj-database-url कहा जाता है एक अच्छी छोटी एप्लिकेशन लिखी है।

+0

कमांड को कॉल करना होगा दिलचस्प है, लेकिन मैं --settings विकल्प का उपयोग करना पसंद करता हूं। धन्यवाद – Griffosx

+0

इस समाधान ने मुझे उत्पादन और विकास के लिए समान सेटिंग्स.py फ़ाइल रखने में मदद की, जिसमें उत्पादन के बाहर डेटाबेस के साथ पर्यावरण चर सेट करके चुना जा रहा है। बहुत बढ़िया! – shaffooo

0

@Danilo बार्ज के लिए धन्यवाद समस्या को हल करने का आसान तरीका डाल दिया। मैं केवल चल रहे परीक्षणों से निपटने के लिए कुछ बदलाव जोड़ता हूं। ऐसा इसलिए है क्योंकि DATABASES['default'] = DATABASES[default_database]DATABASES शब्दकोश में एक प्रविष्टि जोड़ देगा।तो यदि आप परीक्षण चलाते हैं तो परीक्षण धावक 'default' और अगली प्रविष्टि DATABASES के विरुद्ध चलाएगा। इसके बजाय दो शब्दकोशों का प्रयोग करें:

DATABASES_AVAILABLE = { 
    'default': { 
     'NAME': 'db.db', 
     'ENGINE': 'django.db.backends.sqlite3' 
    }, 
    'tests': { 
     'NAME': 'tests.db', 
     'ENGINE': 'django.db.backends.sqlite3' 
    }, 
} 

database = os.environ.get('DJANGO_DATABASE', 'main') 
DATABASES = { 
    'default': DATABASES_AVAILABLE[database] 
} 
संबंधित मुद्दे