Вопрос по macos, apache2, mod-wsgi, django – Как развернуть приложение django на OS X Server?

6

Как можно развернуть приложение Django на OS X Server 2.0, не используя homebrew или другой вариант python, чем тот, который поставляется с OS X 10.8.1? Я'm использовал привязки какао в приложении Django и не смог заставить его работать с homebrew на моем настольном компьютере (под управлением OS X 10.8.1); отсюда и просьба развернуть приложение на установленной в системе версии Python.

У меня есть следующая среда OS X Server, с уже установленным следующим:

OS X 10.8.1OS X Server 2.0Python 2.7.2Apache 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 со следующим содержанием:





        name
        com.example.mysite.wsgi
        displayName
        Python "My Site" app
        launchKeys
        
        proxies
        
        installationIndicatorFilePath
        /Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py
        includeFiles
        
                /Library/Server/Web/Config/apache2/httpd_mysite.conf
        
        requiredModuleNames
        
                wsgi_module
        


Файлcom.example.mysite.wsgi.plist был адаптирован изcom.apple.webapp.wsgi.plist а такжеhttpd_mysite.conf адаптированы изhttpd_wsgi.conf, Оба эти файла используются для запускаавтономный» Приложение Python успешно при настройке через менеджер сервера.

Затем я создал сайт с помощью диспетчера сервера и подтвердил, что мое приложение находится в списке веб-приложений. Тем не менее, когда я посещаю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 затем "Привет, мир" отображается. Поэтому я предполагаю, что wsgi правильно настроен и способен выполнять приложения, и что-то еще не так с моей настройкой.

Ваш Ответ

3   ответа
1

Я столкнулся с трудностями при переносе моего macports django на Mountain Lion Server 10.8.2, и по некоторым причинам приведенные здесь ответы помогли мне вспомнить различия в mod_wsgi.so.

Я переписал /Applications/Server.app/Contents/ServerRoot/usr/libexec/apache2/mod_wsgi.so с моим /opt/local/apache2/modules/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.

Похоже, вы выбрали тот же шаблон.

Однако я все еще работаю со своим статическим контентом, подумал, что обнаружение mod_wsgi.so может помочь кому-то еще перейти с MacPorts.

Ваш файл .so будет перезаписан при обновлении ОС, если они обновят mod_wsgi. Вы должны были поместить свою версию в другом месте и изменить строку LoadModule для mod_wsgi в конфигурации Apache. Graham Dumpleton
Хороший вопрос @GrahamDumpleton, и это красный флаг, когда вы копируете загруженные модули. zerocog
0

Некоторые конфигурации Apache с дистрибутивами отображают .py в CGI или FASTCGI, и это будет конфликтовать с mod_wsgi. Вот почему mod_wsgi рекомендует использовать расширение .wsgi. Итак, переименуйтеwsgi.py» кsite.wsgi» а затем использоватьsite.wsgi» в WSGIScriptAlias.

Кстати, вы можете подтвердить, что существует предварительно скомпилированный файл mod_wsgi.so, поставляемый с сервером Mountain Lion.

Он установлен на/Applications/Server.app/Contents/ServerRoot/usr/libexec/apache2/mod_wsgi.so bloudraak
Вы были правы, переименованиеwsgi.py вmysite.wsgi вызываетсяmod_wsgi, Я столкнулся с другими проблемами, которые были решены путем добавления путей, используяsys.path.append вmysite.wsgi как описано вэтот ответ, Благодарю. bloudraak
-1

Две вещи:

Если вы хотите использовать директиву WSGIScriptAlias, у вас должен быть модуль apache mod_wsgi. Я неСервер OS X не установлен, но, насколько я вижу, модуль не существует в папке / usr / libexec / apache2 в стандарте Mountain Lion. Вам придется скачать его сВот, Дон»Не знаю, включены ли инструменты командной строки в сервер OS X. Мне нужно установить X-код, чтобы получить их в стандартной версии. Кажется, есть некоторыеинструкция о том, как установить его на MacOS X

Посмотри наHomebrew, Это действительно отличный способ добавить дополнительное программное обеспечение для Mac. Вы можете установить последнюю версию python, nginx и uwsgi. Nginx и uwsgi - отличный способ для развертывания приложений django. Я считаю это более гибким и эффективным, чем mod_wsgi (этот второй пункт очень субъективен).

Удачи

Пакет mod_wsgi может не соответствовать стандарту Mountain Lion, но в отчете, который я имел до его выпуска, говорится, что он находится на сервере Mountain Lion. Haven»Это еще не подтверждено, хотя с тех пор, как выпущен. Graham Dumpleton
Как описано в моем вопросе, я использую привязки Какао в своем приложении, и у меня были некоторые проблемы, чтобы заставить его работать, используя Homebrew. Я'Поэтому я предпочел бы избежать этого. bloudraak
Модуль существует в/Applications/Server.app/Contents/ServerRoot/usr/libexec/apache2/mod_wsgi.so bloudraak

Похожие вопросы