我有一个开发的烧瓶应用程序,它在烧瓶的嵌入式服务器上成功运行。该应用程序使用用 C++ 编写的后端。我的 C++ 后端的库位于此文件夹中:
/home/(USER_NAME)/rf/Dev/Backend/lib/libtestCAF.so
当我在嵌入式服务器上运行应用程序时,它会找到 C++ 后端代码并使用它来生成报告。但是,当我在 apache 上运行相同的应用程序时,我得到了这个错误跟踪:
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] from main.main import main
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] File "/home/(USER_NAME)/rf/Dev/Web/main/main.py", line 19, in <module>
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] from CAF.CAFWrapper import *
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] File "/home/admin1/rf/Dev/Web/CAF/CAFWrapper.py", line 12, in <module>
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] lib = cdll.LoadLibrary('../Backend/lib/libtestCAF.so')
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] return self._dlltype(name)
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] self._handle = _dlopen(self._name, mode)
[Thu Jul 11 14:44:54 2013] [error] [client 127.0.0.1] OSError: ../Backend/lib/libtestCAF.so: cannot open shared object file: No such file or directory
正如您在最后一行看到的,它说 libtestCAF.so 不存在。同时,嵌入式服务器总能找到它。
我使用 mod_wsgi 在 apache 服务器上运行烧瓶应用程序。我使用的 WSGI 文件在这个文件夹中:
/home/(USER_NAME)/rf/Dev/Web/wsgi/rf.wsgi
...它说:
import sys
sys.path.insert(0,'home/(USER_NAME)/rf/Dev/Web')
from runserver import app as application
这是我的 apache 配置文件:
<VirtualHost *:8100>
ServerName www.relativefinder.com
WSGIDaemonProcess rf user=www-data group=www-data threads=5
WSGIScriptAlias / /home/(USER_NAME)/rf/Dev/Web/wsgi/rf.wsgi
<Directory /home/(USER_NAME)/rf/Dev>
WSGIProcessGroup rf
WSGIApplicationGroup %{GLOBAL}
Options Indexes FollowSymLinks MultiViews
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
加载 .so 文件的 python 文件使用以下代码:
if SettingsToUse == DEV_CAF:
lib = cdll.LoadLibrary('../Backend/lib/librelativefinder.so')
else:
lib = cdll.LoadLibrary('../Backend/lib/libtestCAF.so')
我很困惑 Apache 似乎没有找到它,但烧瓶中的嵌入式服务器似乎总是能找到它。我需要做什么才能在我运行 apache 时找到那个 .so 文件?