我正在尋找解決方案,我無法將/ apache變量定義傳遞給/ etc/profile。Django - 無法將環境變量傳遞給WSGI接口上的Apache/Passenger
這裏是我想設置:
我有我通過Apache /乘客(modrails)通過WGSI接口部署Django應用程序。
在我的settings.py我使用這條巨蟒的命令: 環境= os.getenv(「ENV」,「PROD」) 所以如果環境變量沒有定義它在默認情況下進入到生產設置。
這幫助我管理哪些數據庫連接並激活調試工具。
它在生產中工作,因爲它是默認值,當我在DEV服務器上時,我無法從/ etc/profile獲取環境變量。
這是一個Ubuntu 10.04服務器上
因此,這裏是一些測試我所做的:
1)放入/ etc/profile文件 - > ENV = 'DEV' 出口ENV
2)根據/etc/profile.d/environment.sh! - > #/ bin/sh的 ENV =在我的虛擬主機配置文件 'DEV' 出口ENV
3) - > PassEnv ENV
4)仍然在我的虛擬主機配置文件 - > SETENV ENV DEV
5)乘客要求passenger_wgsi.py註冊您的應用程序,如果我在這個文件中 病毒粒子[ 'ENV' 逼] =「DEV」這走了一個工作,但我不能做到這一點
ENVIRONMENT = os.getenv('ENV', 'PROD')
os.environ['ENV'] = ENVIRONMENT
任何想法,爲什麼或如何解決這個問題? 謝謝!
@Josh
感謝您的答覆。但我仍然有一些問題。
使用Passenger時,我必須在虛擬主機文件 中設置的唯一東西是我的python/django應用程序內公用文件夾的位置。 所以我的虛擬主機文件看起來像這樣。
DocumentRoot path_to_my_public_folder # /home/user/workspace/myapp/public
然後在myapp文件夾裏面有passenger_wsgi。PY
它定義很少像你說:
import sys, os
sys.path.append(os.getcwd())
os.environ['DJANGO_SETTINGS_MODULE'] = "myapp.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
這些設置就是這樣之後,應用程序正在運行。 因此,我可能錯過了你的指示,當你說我們必須指定 我們使用的wsgi文件。我雖然它會直接找到passenger_wsgi.py,並默認加載它看起來 目前正在做的事情。
你應該知道的另一件事是,我們的項目是在SVN存儲庫中,我想爲許多用戶設置這個文件,所以我們沒有不同的設置。
但我會測試tomorow是具有一個基本的WSGI文件與計算機的主機名的公共信息 和基礎,我會從像dev_wsgi.py導入其他設置或prod_wsgi.py的想法
我應該能夠檢索這個名稱與python和基於名稱我將設置我需要使用的變量。
謝謝你的想法,非常感謝。
對不起,我以前沒有和Passenger一起工作過。我唯一的經驗是使用Apache,我們必須在httpd.conf中定義`/ path/to/production.wsgi`。聽起來就像你正朝着正確的軌道前進,如果env變量仍然不起作用。 – 2011-02-14 04:49:10