gpt4 book ai didi

django - 如何在 OS X Server 上部署 django 应用程序?

转载 作者:行者123 更新时间:2023-12-02 08:42:41 25 4
gpt4 key购买 nike

如何在不使用自制软件或与 OS X 10.8.1 附带的 Python 风格不同的情况下在 OS X Server 2.0 上部署 Django 应用程序?我在 Django 应用程序中使用 cocoa 绑定(bind),但无法让它在我的台式机(运行 OS X 10.8.1)上与自制软件一起工作;因此请求在系统安装的 Python 版本上部署应用程序。

我有以下 OS X Server 环境,并且已安装以下内容:

  • OS X 10.8.1
  • OS X 服务器 2.0
  • Python 2.7.2
  • Apache 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.plisthttpd_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 已正确配置并且能够执行应用程序,并且我的设置存在其他问题。

最佳答案

我发现自己很难将 macports django 迁移到 Mountain Lion Server 10.8.2,出于某种原因,这里的答案帮助我记住了 mod_wsgi.so 的差异。

我用我的/opt/local/apache2/modules/mod_wsgi.so 覆盖了/Applications/Server.app/Contents/ServerRoot/usr/libexec/apache2/mod_wsgi.so。

我希望完全删除 MacPorts apache2,但我想我最好保留它。目前我仍然更喜欢 MacPorts Python,因为它更容易跟上数字密集型软件包的更新。

是的,还要确保将 wsgi.py 更改为 wsgi.wsgi。

我将httpd_wsgi.conf复制到httpd_mywsgi.conf;我将 django.wsgi 添加到/Library/Server/Web/Data/WebApps。
在/Library/Server/Web/Config/apache2/webapps 中,我复制了 com.apple.webapp.wsgi.plist。

看来您选择了相同的 plist 模式。

我仍在研究我的静态内容,但是,我认为 mod_wsgi.so 的发现可以帮助其他人从 MacPorts 迁移。

关于django - 如何在 OS X Server 上部署 django 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12233628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com