私の Web アプリケーションには、次のコードがあります。
from rdkit import Chem
これにより、apache でクラッシュすることがログに記録されています。
[Fri Sep 06 10:35:44 2013] [error] [client 172.22.69.51] ImportError: libRDGeneral.so.1: cannot open shared object file: No such file or directory
この問題は LD_LIBRARY_PATH が原因のようですが、wsgi.py ファイルに設定しました。
os.environ['LD_LIBRARY_PATH']='/usr/lib/oracle/11.2/client64/lib:/nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib:/nfs/public/rw/chembl/utils/indigo/lib/Linux/x64/'
VirtualHost apache conf と同様に:
<VirtualHost *:8787>
...
SetEnv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib:/nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib:/nfs/public/rw/chembl/utils/indigo/lib/Linux/x64/
</VirtualHost>
同じマシンのコマンドラインから問題なくこれを実行できます:
(chembl_webservices)-bash-4.1$ export PYTHONPATH=/nfs/public/rw/chembl/utils/RDKit_2012_09_1/
(chembl_webservices)-bash-4.1$ export LD_LIBRARY_PATH=/nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib
(chembl_webservices)-bash-4.1$ /nfs/public/rw/chembl/utils/virtualenvs/ldc/envs/chembl_webservices/bin/python
Python 2.7.5 (default, Aug 5 2013, 17:00:57)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import rdkit
from rdkit import Chem
もちろん、スクリプトに LD_LIBRARY_PATH の実際の値を出力させることもできるので、正しく設定されていること、ファイルとパスが存在すること、および権限が適切であることを確認できます。
ls /nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib -lh
-rwxr-xr-x 1 cbl_adm cbl_pub 406K Aug 8 11:13 libRDGeneral.so.1.2012.09.1
ldd libRDGeneral.so.1.2012.09.1 を実行して、すべての依存関係が満たされていることを確認できます。
linux-vdso.so.1 => (0x00007fff397ff000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f096ecd5000)
libm.so.6 => /lib64/libm.so.6 (0x00007f096ea50000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f096e83a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f096e4a7000)
/lib64/ld-linux-x86-64.so.2 (0x00007f096f22d000)
では、何が問題なのですか?他に何ができますか?どうすればデバッグできますか? 助けてください。