2012-08-06 35 views
0

在生產服務器上,我想同步數據庫。如何手動將我的production_settings添加到sys.path以運行syncdb?

如果我只是做了該

django-admin.py syncdb會挑settings.py。但我有一個額外的settings-production.py從設置繼承。

因此,我想出了這個:

django-admin.py syncdb --settings=/path/to/settings_production 

ImportError: Could not import settings '/path/to/settings_production' (Is it on sys.path?): Import by filename is not supported.

我用Google搜索,發現有人有類似的問題here。然而令我困惑的是,WSGI.py只能被Apache讀取。不是,如果我自己運行命令。那裏的答案對我來說並不合適。

如何手動在sys.path中添加我的production_settings以運行syncdb? 非常感謝,

回答

1

首先確保settings_production.pysettings.py位於同一個目錄中。

因爲你是從設置繼承,你可以在settings.py底部添加:

try: 
    from settings_production import * 
except ImportError: 
    pass 

如果你想使用settings_production.py確保它擁有所有的設置爲您的應用(數據庫,等人)然後:

DJANGO_SETTINGS_MODULE=settings_production python manage.py syncdb

編輯

我要發佈它作爲一個評論,但它變得太長:

我就是這麼做的,因爲通常在製作一個只改變,你可以在主settings.py導入幾個值;並使用變量的最後一個值(因此如果您在settings_production.py中設置生產數據庫,則使用該設置)。

這樣更簡單,因爲django默認會查找settings.py;避免必須處理環境變量和導入路徑,特別是如果你正在改變小事情。

這種方法有一些缺點;例如我無法想象它的便攜性,特別是如果您有多個環境(staging/testing/production/dev),那麼您有多個from _foo_ import *語句,並且可能導致問題,因爲導入的順序變得很重要;如果你忘記了並且圍繞着一個流氓settings_*.py左右 - 例如測試環境也得到了dev文件,因爲有些開發人員忘了將它從測試分支中刪除。

對於更復雜的設置,其更容易保留完整副本的主文件settings.py;然後將DJANGO_SETTINGS_MODULE指向這些文件的Python路徑。這裏需要注意的是,您必須確保PYTHONPATH已調整爲包含您的設置的位置。請參閱SplitSettings wiki entry

+0

感謝Burhan,根據http://djangobook.com/en/2.0/chapter12/下的使用不同的生產設置,它是settings_production.py,從設置導入的設置導入*'你似乎這樣做其他方式,不是嗎? – Houman 2012-08-06 13:47:44

相關問題