6

自作やOSX10.8.1に付属しているものとは異なる種類のPythonを使用せずに、OS X Server 2.0にDjangoアプリケーションをデプロイするにはどうすればよいですか?Djangoアプリケーションでcocoaバインディングを使用していますが、デスクトップマシン(OS X 10.8.1を実行)で自作で動作させるのに問題がありました。したがって、システムにインストールされているバージョンのPythonにアプリケーションをデプロイするリクエスト。

次のOSXServer環境があり、次のものがすでにインストールされています。

  • 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

私の最初の試みは、空のWebサイトをデプロイすることです。それが成功したら、本番環境で使用する実際のアプリケーションをデプロイします。プロジェクトは/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]

そして、「Hello World」が表示されるの/Library/Server/Web/Data/WebApps/helloworld.wsgiではなく、ポイントするようにファイルを更新します。/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.pyしたがって、wsgiが正しく構成され、アプリケーションを実行できること、およびセットアップに問題があると想定しています。

4

3 に答える 3

1

macportsdjangoをMountainLionServer 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を完全に削除したいと思っていましたが、そのままにしておくほうがいいと思います。数値的に集中的なパッケージを最新の状態に保つ方が簡単なので、現時点ではMacPortsPythonの方が好きです。

はい、その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から移行するのに役立つと思いました。

于 2012-11-01T05:11:27.933 に答える
0

ディストリビューションを使用する一部のApache構成は、.pyをCGIまたはFASTCGIのいずれかにマップし、これはmod_wsgiと競合します。これが、mod_wsgiが.wsgi拡張子の使用を推奨する理由です。したがって、「wsgi.py」の名前を「site.wsgi」に変更してから、WSGIScriptAliasで「site.wsgi」を使用します。

ところで、MountainLionサーバーにプリコンパイルされたmod_wsgi.soが同梱されていることを確認できますか。

于 2012-09-04T00:47:32.403 に答える
-1

2つのこと:

  1. WSGIScriptAliasディレクティブを使用する場合は、mod_wsgiapacheモジュールが必要です。私はOSXサーバーを持っていませんが、私が見る限り、モジュールはマウンテンライオン標準の/ usr / libexec/apache2フォルダーに存在しません。ここからダウンロードする必要があります。コマンドラインツールがOSXサーバーに含まれているかどうかわからない。標準バージョンにするには、Xコードをインストールする必要があります。macosxにインストールする方法についていくつかの指示があるようです

  2. Homebrewを見てください。これは、Macにソフトウェアを追加するための非常に優れた方法です。ひねりを加えて、最新のpython、nginx、uwsgiをインストールできます。Nginxとuwsgiは、djangoアプリをデプロイするための優れた方法です。mod_wsgiよりも柔軟で効率的だと思います(この2番目のポイントは非常に主観的です)。

幸運を

于 2012-09-04T00:20:34.147 に答える