2012-06-25 45 views
10

我使用Django 1.4的Django的runserver自定義數據庫

我要開始開發服務器,我想指定(在命令),則必須使用至極數據庫。例如,如果我的設置包括:

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

我想使用類似:

django-admin.py runserver --database=tests 

有相似的地方?我還試圖用第二個設置文件,但--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

嗯,實際上錯誤是'ImportError:無法導入設置'settings_tests'(它是否在sys.path?上):沒有模塊命名設置。我已經在root項目目錄(settings.py的相同級別)中添加了文件settings_test.py。錯誤是關於_module_而不是關於_file _... – Griffosx

16

一個更清潔,可切換的配置,而不是創建多個配置文件是使用環境變量更多可擴展的方式(請參閱使用#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 

您還可以設置使用Python代碼的環境變量。


編輯:爲了使這個過程更容易,肯尼斯·賴茨寫稱爲dj-database-url一個可愛的小應用程序。

+0

有趣,但我更喜歡使用--settings選項。謝謝 – Griffosx

+0

這個解決方案幫助我保留了用於生產和開發的相同settings.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] 
}