如何在 OS X Server 2.0 上部署 Django 应用程序而不使用自制软件或与 OS X 10.8.1 附带的不同风格的 python?我在 Django 应用程序中使用 cocoa 绑定,但无法在我的桌面机器(运行 OS X 10.8.1)上使用自制软件;因此请求在系统安装的 Python 版本上部署应用程序。
我有以下 OS X Server 环境,已安装以下内容:
- OS X 10.8.1
- OS X 服务器 2.0
- Python 2.7.2
- 阿帕奇 2.2.22
Django 1.4.1 是使用以下命令安装的:
sudo easy_install django
我的第一次尝试是部署一个空网站,一旦成功,就部署一个真正的应用程序以用于生产。该项目是/Library/Server/Web/Data/WebApps/mysite/
使用以下命令创建的
django-admin.py startproject 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
. 当通过服务器管理器配置时,这两个文件都用于成功运行“独立”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 已正确配置并且能够执行应用程序,并且我的设置有其他问题。