如何在OS X Server 2.0上部署Django應用程序,而不使用自制軟件或與OS X 10.8.1一起發佈的Python的不同風格?我在Django應用程序中使用可可綁定,並且無法在桌面機器上使用自制軟件(運行OS X 10.8.1);因此請求在系統安裝的Python版本上部署應用程序。如何在OS X服務器上部署django應用程序?
我有以下的OS X Server環境中,已經安裝了以下情況:
- OS X 10.8.1
- OS X Server 2.0的
- 的Python 2.7.2
- 的Apache 2.2。 22
使用以下命令安裝了Django 1.4.1:
sudo easy_install django
我的第一個嘗試是部署一個空的網站,一旦成功,部署一個真正的應用程序用於生產。該項目是使用下面的命令
django-admin.py startproject mysite
在/Library/Server/Web/Data/WebApps/mysite/
創建我使用下面的命令運行應用程序。它只是確認應用程序已啓動並正在運行。這是標準的「它的工作!」當你第一次創建一個項目時。
python manage.py runserver 8080
我然後創建的文件/Library/Server/Web/Config/apache2/httpd_mysite.conf
使用以下內容:
WSGIScriptAlias /mysite /Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py
我還創建的文件/Library/Server/Web/Config/apache2/webapps/com.example.mysite.wsgi.plist
使用以下內容:
<?xml version="1.0" encoding="UTF-7"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>com.example.mysite.wsgi</string>
<key>displayName</key>
<string>Python "My Site" app</string>
<key>launchKeys</key>
<array/>
<key>proxies</key>
<dict/>
<key>installationIndicatorFilePath</key>
<string>/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py</string>
<key>includeFiles</key>
<array>
<string>/Library/Server/Web/Config/apache2/httpd_mysite.conf</string>
</array>
<key>requiredModuleNames</key>
<array>
<string>wsgi_module</string>
</array>
</dict>
</plist>
文件com.example.mysite.wsgi.plist
改編自com.apple.webapp.wsgi.plist
和httpd_mysite.conf
改編自httpd_wsgi.conf
。這兩個文件都用於在通過服務器管理器進行配置時成功運行「standalone」python應用程序。
然後我用服務器管理器創建了一個站點,確認我的應用程序在Web應用程序列表中。但是,當我訪問http://example.com/mysite時,出現500錯誤。日誌具有以下條目(IP地址改爲1.2.3.4隱私原因):
[Sat Sep 01 21:49:17 2012] [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Sat Sep 01 21:49:17 2012] [notice] Apache/2.2.22 (Unix) PHP/5.3.13 with Suhosin-Patch mod_wsgi/3.3 Python/2.7.2 mod_fastcgi/2.4.6 mod_ssl/2.2.22 OpenSSL/0.9.8r DAV/2 configured -- resuming normal operations
[Sat Sep 01 21:50:13 2012] [error] [client 1.2.3.4] (8)Exec format error: exec of '/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py' failed
[Sat Sep 01 21:50:13 2012] [error] [client 1.2.3.4] Premature end of script headers: wsgi.py
它似乎沒有了WSGI模塊處理該請求,而是請求可以使用FCGI處理。但是,日誌表明mod_wsgi/3.3
已加載。
當我創建了一個標準的Python應用程序,如下所示:
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
而且更新文件指向/Library/Server/Web/Data/WebApps/helloworld.wsgi
而非/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py
那麼「Hello World」的顯示。因此,我假定wsgi配置正確並且能夠執行應用程序,而且我的設置還有其他問題。
它被安裝在'/ Applications/Server.app/Contents/ServerRoot/usr/libexec/apache2/mod_wsgi.so' – bloudraak
你是對的,把'wsgi.py'重命名爲'mysite.wsgi',調用'mod_wsgi'。我遇到了其他問題,這可以通過在mysite.wsgi中使用'sys.path.append'添加路徑來解決,如[本答案](http:// stackoverflow)中所述。COM /問題/ 2587251 /配置問題的-與-的Django和MOD-WSGI)。謝謝。 – bloudraak