2011-03-29 32 views
9

我想用一個不同的設置文件在Django - 特別settings_prod - 但每當我試圖做一個執行syncdb與--settings=settings_prod,它抱怨:使用設置文件以外的其他settings.py在Django

python2.6 manage.py syncdb --settings=settings_prod 
Error: Can't find the file 'settings.py' in the directory containing 'manage.py'. It appears you've customized things. 
You'll have to run django-admin.py, passing it your settings module. 
(If the file settings.py does indeed exist, it's causing an ImportError somehow.) 

我也嘗試過設置環境變量DJANGO_SETTINGS_MODULE=settings_prod到最後。

編輯:我還設置環境變量在我的WSGI文件,還沒有結束:

import os 
import sys 

from django.core.handlers.wsgi import WSGIHandler 

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings_prod' 
application = WSGIHandler() 

建議?

+1

並與WSGI是它正常工作?我之前遇到過這個問題,但只有'manage.py' – pajton 2011-03-29 00:36:36

+0

我這麼認爲,因爲它至少顯示了我設置的URL。我只是不能把它到syncdb。 – 2011-03-29 00:38:51

+0

好吧,有人只是回答了我的想法:)。 'import settings'在'manage.py'中被硬編碼,所以沒有這個簡單的方法。 – pajton 2011-03-29 00:40:31

回答

9

我知道,不管你用manage.py做什麼,你會得到這個錯誤,因爲manage.py做的settings相對進口:

try: 
    import settings # Assumed to be in the same directory. 

http://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-option---settings

Note that this option is unnecessary in manage.py, because it uses settings.py from the current project by default.

你應該嘗試django-admin.py syncdb --settings=mysettings而不是

+1

我試過了,但我得到:'ImportError:無法導入設置'settings_prod'(它是否在sys.path?上):沒有名爲settings_prod的模塊 - 但它應該是,根據我的WSGI文件 – 2011-03-29 00:41:45

+0

那麼,實際上我只是修改了WSGI文件來包含這個:'sys.path.append(「/ home/username/webapps/django/project」)',但是仍然沒有bueno。 – 2011-03-29 00:46:30

+0

嘗試將--pythonpath參數傳遞給django-admin.py以確保您的路徑設置正確。 – Wogan 2011-03-29 00:47:43

10

嘗試創建一個settings mod ULE。

  1. 在與manage.py相同的目錄中創建一個settings文件夾。
  2. 將不同的設置文件放在該文件夾中(例如base.pyprod.py)。
  3. 設置__init__.py並導入您想要用作默認設置的任何設置。例如,您__init__.py文件可能是這樣的:

    from base import * 
    
  4. 運行您的項目,並覆蓋設置:

    $ python2.6 manage.py syncdb --settings=settings.prod 
    
0

這將幫助你:

  • 創建另一個文件「setting_prod.py」與你的原始settings.py文件。

  • 在setting_prod.py文件中記下您需要運行的設置。

  • 然後在您的settings.py文件中導入setting_prod.py文件。

for ex。 settings.py:

VARIABLE = 1 

import setting_prod 

setting_prod.py

VARIABLE = 2 

在settings.py文件導入setting_prod.py文件後,變量將設置新的值設置爲 「2」,從 「1」。

+0

爲什麼你最後有.py?我有錯誤'ImportError:沒有名爲py'的模塊和VARIABLE字符串將不會被替換,因爲你想要的。如果你有'如果設置 '從setting_prod進口*' 你會得到你正在尋找的行爲,但是,它是Python的少進口setting_prod'將它作爲setting_prod.VARIABLE – holms 2013-09-04 05:16:52

+0

。 – IamnotBatman 2014-03-18 03:42:19

0

我們可以使用這種方法來設置不同的設置文件,例如,我爲我的單元測試(settings_unit_test.py)使用不同的設置文件。另外,我還針對不同的基礎結構環境settings_dev.py,settings_test.py和settings_prod.py提供了其他設置文件。

在Windows環境(同樣可以在linux要做的事)

set DJANGO_SETTINGS_MODULE=settings_unit_test 
set PYTHONPATH=<path_of_your_directory_where_this_file_'settings_unit_test.py'_is_kept> 
相關問題