2011-10-21 8 views
7

Apache2に私のDjango Webサイトをmod_wsgiでubuntuにデプロイします。Apacheとmod_wsgiを使ってdjangoのWebサイトにLD_LIBRARY_PATHを個別に設定する方法

私のDjangoビューでは、LD_LIBRARY_PATHに設定された特定のパスを必要とするモジュールをインポートします。それが動作

export LD_LIBRARY_PATH=/home/user/target_libdir:$LD_LIBRARY_PATH 

:として私は、/ etc/apache2/envvarsでLD_LIBRARY_PATHを設定

しかし私のサーバーでは、独立したVirtualHostエントリにそれぞれ独立したwsgiスクリプトを持つ複数のdjango Webサイトを実行します。

問題は、ウェブサイトが異なるLD_LIBRARY_PATHバージョンを使用する必要があることです。

私はどのようにしてLD_LIBRARY_PATHをすべてのdjango Webサイトに対して個別に設定できますか?

答えて

5

あなたはそれができないと仮定します。 LD_LIBRARY_PATHは、最初のプロセスの開始時に一度だけ読み込まれます。プロセスが実行されている間は設定できません。フォークの前に再度設定することもできません。 execの前に設定することはできますが、mod_wsgiデーモンプロセスはforkであり、execではありません。

3

更新

以下は明らかに動作しません。他の人に警告としてここに残しておきます。


.wsgiファイルに設定するとうまくいく可能性があります。

import os,sys 

sys.path.append('/path/to/django') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' 
os.environ['LD_LIBRARY_PATH'] = '/path/to/library' 

import django.core.handlers.wsgi 

_application = django.core.handlers.wsgi.WSGIHandler() 

def application(environ,start_response): 
    return _application(environ,start_response) 
+4

私はそれがこのように働いて得ることができない、との方法で私は、このソリューションは、で動作するようになっているとは思いませんすべて。私は正しくLD_LIBRARY_PATHを理解する場合は、ここで説明されているようにPythonが実行される前に設定する必要があります:http://stackoverflow.com/questions/1178094/change-current-process-environment and here http://stackoverflow.com/questions/856116/実行時のctypesの変更時のld-library-path-at-runtime – jan

2

まあ、スクリプトを実行する前にLD_LIBRARY_PATH変数を設定することができず、カスタムライブラリの1つまたは2つをインポートしたい場合は、ホストサーバーのホームディレクトリごくわずかなアクセス権しか持たず、上記の質問のようにすべてのサイトに対してカスタマイズする必要があります。

すべての適切な解決法が利用できないこれらの場合、ctypesを使用してライブラリをロードし、それらを使用するモジュールをインポートすることができます。上記の質問のように、すべてのライブラリをすべてのサイトのカスタムフォルダからロードするのは簡単です。

は、だから私は、私がやってしまった1つの依存関係を持つlibpuzzleとしていた問題のために:

from ctypes import * 
lib1 = cdll.LoadLibrary('/home/username/lib/libpuzzle.so') 
lib2 = cdll.LoadLibrary('/home/username/lib/libgd.so') 

import pypuzzle 
関連する問題