Ошибка формата exec: apache + mod_wsgi в Mac OS X Lion - PullRequest
4 голосов
/ 10 февраля 2012

Я пытаюсь настроить среду веб-разработки с использованием Python 2.7, apache, mod_wsgi и web2py на iMac под управлением Lion (Mac OS X 10.7.3).

Я скачал и установил mod_wsgi v. 3.3 (./configure; make; sudo make install)

Он установлен в / usr / libexec / apache2. Все выглядит разумно:

07:49 PM ~ [541] otool -L /usr/libexec/apache2/mod_wsgi.so 
/usr/libexec/apache2/mod_wsgi.so:
    /Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 635.19.0)

07:55 PM ~ [542] file /usr/libexec/apache2/mod_wsgi.so 
/usr/libexec/apache2/mod_wsgi.so: Mach-O universal binary with 2 architectures
/usr/libexec/apache2/mod_wsgi.so (for architecture x86_64): Mach-O 64-bit bundle x86_64
/usr/libexec/apache2/mod_wsgi.so (for architecture i386):   Mach-O bundle i386

Я добавил несколько директив конфигурации в /private/etc/apache2/httpd.conf после всех директив LoadModule.

LoadModule wsgi_module libexec/apache2/mod_wsgi.so
WSGIScriptAlias / /Library/WebServer/Documents

Я перезапустил демон apache. Журнал apache выглядел хорошо:

[Чт, 09 февраля 19:19:15 2012] [извещение] Apache / 2.2.21 (Unix) mod_ssl / 2.2.21 OpenSSL / 0.9.8r DAV / 2 mod_wsgi / 3.3 Python / 2.7.2 настроен - возобновление нормальные операции

Я поместил этот файл в папку / Library / WebServer / Documents:

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]

Я выполнил его из браузера с помощью: http://192.168.1.2/test.py

Я получил ответ «500 Internal Server error.»

В журнале моего сервера написано:

[Thu Feb 09 20:12:10 2012] [error] [client 192.168.1.2] (8)Exec format error: exec of '/Library/WebServer/Documents/test.py' failed
[Thu Feb 09 20:12:10 2012] [error] [client 192.168.1.2] Premature end of script headers: test.py
[Thu Feb 09 20:12:10 2012] [error][client 192.168.1.2] mod_wsgi (pid=4251): Target WSGI script '/Library/WebServer/Documents/favicon.ico' does not contain WSGI application 'application'.

После долгих поисков я так и не смог выяснить, почему. Я даже вставил favicon.ico в папку с документами. Это привело к записи в журнал:

[Thu Feb 09 19:15:44 2012] [error] [client 192.168.1.2] (8)Exec format error: exec of '/Library/WebServer/Documents/test.py' failed
[Thu Feb 09 19:15:44 2012] [error] [client 192.168.1.2] Premature end of script headers: test.py
[Thu Feb 09 19:15:46 2012] [error] [client 192.168.1.2] mod_wsgi (pid=4135): Target WSGI script '/Library/WebServer/Documents/favicon.ico' does not contain WSGI application 'application'.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 10 февраля 2012

Вы сопоставили WSGIScriptAlias ​​с самим каталогом DocumentRoot и без конечной косой черты в каталоге, что, вероятно, означает, что он пытается загрузить каталог каким-то плохим способом как файл сценария WSGI и не удается. Преждевременное завершение сообщения в файле скрипта вызывает путаницу, если только вы не включили всю свою конфигурацию mod_wsgi. Это сообщение указывает, что вы используете режим демона mod_wsgi, который не отображается, или что-то на самом деле интерпретируется как сценарий CGI.

В любом случае, то, что вы, вероятно, захотите сделать, если вы хотите удалить файлы .py в DocumentRoot, это удалить WSGIScriptAlias ​​и затем добавить:

<Directory /Library/WebServer/Documents>
AddHandler wsgi-script .py
Options +ExecCGI
</Directory>

Это будет означать, что 'http://192.168.1.2/test.py' должно работать, плюс вы все равно можете удалить другие статические файлы в этот каталог, и они будут обработаны.

Убедитесь, что вы идете пересмотреть:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide

...