我有一个基于CherryPy的应用程序。我一直在使用CherryPy内置的HTTP服务器,但现在想转移到uWSGI(和nginx)。
在我的工作站上,这种方法很好,而且变化很简单。
然而,在我的测试服务器上,我收到以下错误。
File "./validator/dbtools.py", line 3, in <module>
import psycopg2
File "/home/apiuser/API25/env/lib64/python3.5/site-packages/psycopg2/__init__.py", line 50, in <module>
from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: /home/apiuser/API25/env/lib64/python3.5/site-packages/psycopg2/_psycopg.cpython-35m-x86_64-linux-gnu.so: undefined symbol: lo_truncate64
unable to load app 0 (mountpoint='') (callable not found or import error)
测试服务器不同(CentOS 7与我工作站上基于Ubuntu的发行版)。当我谷歌查看错误时,我会看到类似错误的报告,但是在不同的库中。 psycopg库没有改变,实际上应用程序的两个版本(CherryPy / uWSGI版本)从同一个VirtualEnv运行。将它作为CherryPy服务运行仍然可以。
我对这一切都是新手,所以任何帮助都将受到赞赏!
编辑 - 回应Piotr提出的问题:我用这样一个小的bash脚本为应用程序加注星标:
#!/bin/bash
. env/bin/activate
uwsgi --socket 127.0.0.1:8030 --protocol=http --wsgi-file wsgi.py --callable wsgiapp
我接受了另外两件事:
1.我建立了一个运行CentOs的新测试服务器。在这个新服务器上,uwsgi应用程序启动时没有未定义的符号错误。我仍然想知道是什么原因造成这种情况。
2.一些API端点包括在后台线程中启动的一些功能。在CherryPy的默认服务器后运行应用程序时,这些工作正常。使用uWSGI运行应用程序时,后台线程不会执行但似乎排队等待。当我终止应用程序(控制台上的Control-C)时,这些线程突然运行,这些任务(特别是推送通知)将通过。