5

本番サーバーでは Ubuntu 12.04 を実行しています。アプリケーションが定義済みの一貫した環境で実行されていることを確認するために、Pythonbrew を使用してカスタム Python をコンパイルします。API サーバーを実行するユーザーを作成しました。このユーザーには、Pythonbrew で作成された独自の Python 2.7.2 環境があり、pip を使用して必要なパッケージがインストールされています。

システムに uWSGI もインストールしました。API アプリケーションをラップし、mod_wsgi を介して Apache で使用できるようにします。問題は、uWSGI で正しい python バイナリを使用できないことです。現在の構成は次のようになります。

[uwsgi]
socket = 127.0.0.1:3031
processes = 4
chdir = /home/app/
pythonpath = /home/app
gid = 1002
uid = 1002
module = api
callable = APP
enable-threads = true

端末でこの構成を実行しようとすると、次のようになります。

uwsgi --ini app.ini

一部のモジュールのインポートに失敗します。このモジュールは、API ユーザーが使用している Pythonbrew 環境にのみインストールされます。問題は、uWSGI が /usr/bin でデフォルトの python バイナリを使用していることです。

1つの解決策は、APIユーザーの環境でpipを使用してインストールされた別のuWSGIを使用することですが、OSとの統合が優れているため、システムのuWSGIを使用したい.

別のものをインストールする以外に、どのPythonバイナリuWSGIを使用するかを指定する方法はありますか? uWSGI の別のインスタンスをインストールする必要がある場合、システムの起動時に起動する最善の方法は何ですか?

編集:おそらくpythonバイナリを使用していないことに気付きましたが、そのライブラリに裏打ちされているだけなので、wsgiのデフォルトのインストールとデフォルト以外のpythonを使用する方法はありません。しかし、カスタムビルドの uWSGI をシステムに統合する最良の方法は何かという疑問が残ります。

4

3 に答える 3

1

uWSGI (および mod_wsgi) は python バイナリを使用しませんが、python 共有ライブラリを使用するため、uWSGI python プラグインを pythonbrew ユーザーの特定のライブラリにリンクする必要があります。

それを達成するための多くのトリックがあります(特に、pythonbrew pythonバージョンがシステムバージョンと一致する場合)、最初に頭に浮かんだのは、構成ファイルでpythonbrewユーザーのプレフィックスを次のように指定することです

env = PYTHONHOME=パス

ところで、ユーザーのために完全な python インストールの代わりに virtualenvs を使用するほうがよいのではないでしょうか?

于 2012-10-04T08:23:04.473 に答える