廿叁-Supervisor 配置 Django 被 Sqlite3 在 LD_LIBRARY_PATH 上坑了

1. Django简单运行可以

前期说想写个 Web App 做管理以及发布 API。

廿贰-NodeJS简单代理池(承) 以及 Python 捉取网页内容

写好后在 Github 直接 Clone 过去云服务器运行,发现服务器上有好多依赖包都没安装好,依次安装完:

sudo pip3 install Django django_extensions python-dateutil

后,直接

python3 manage.py runserver --noreload 0.0.0.0:1039

是可以运行,挺顺畅的。

2. 托管程序

想着想着直接运行那不行啊,客户端一退出就不行了,必须得托管。

那托管应用哪家强!?当然推选 supervisor !

(其实主要原因是我不知道其他哪些好)

3.噩梦开始

然后忽然脸色一黑,为什么上不了?我直接运行是可以的,为什么上不了?

我把防火墙 Firewalld 关掉,还是上不了,Nginx 的反向代理配置我是正常的呀。

而且更重要的是,无论我在 Supervior 里面配置:

loglevel=debug

什么的就是不出 Log ,我也找不到原因啊。

4.曙光

在百般无奈的情况下,我无意中尝试输入了

sudo python3 manage.py runserver --noreload 0.0.0.0:1039

诶!显示 sqlite3 版本低!

为甚没有 sudo 可以,有 sudo 识别不了更新版本的 sqlite3 呢!?

5.更新sqlite3

因为 Django 是需要 sqlite3.8 以上的版本,千辛万苦找到一个很好的文章

更新CentOS的SQLite版本

我明明已经更新好了呀,我看到版本号都是高于3.8的了呀!为什么还是不行?

6.LD_LIBRARY_PATH

思来想去,报错是报 Python Import 那个 Sqlite3 的时候 Import 的包的版本问题。

[Berry@tencentcloud ~]$ sudo python3
>>> from sqlite3 import dbapi2 as Database
>>> Database.sqlite_version_info
(3, 7, 7)

[Berry@tencentcloud ~]$ python3
>>> from sqlite3 import dbapi2 as Database
>>> Database.sqlite_version_info
(3, 27, 2)

7.为什么会这样了!?

在几个小时候,我终于找到了一个文章:

LD_LIBRARY_PATH

里面说了:

本人在/etc/environment中设置了环境变量:

JAVA_HOME=/opt/java ORACLE_HOME=/home/user2/ LD_LIBRARY_PATH=/usr/lib:/usr/local/lib 正常情况下执行没有问题,但使用sudo XXXXXXX的时候,其他变量都好使,除了LD_LIBRARY_PATH; 经探索,找到原因:

据说因为安全原因,Linux系统做了限制。 LD_LIBRARY_PATH not loading from .profile nor /etc/environment

愤怒!

还看到了下面这一句:

我们可以在 ~/.bashrc 或者 ~/.bash_profile 中加入 export 语句,前者在每次登陆和每次打开 shell 都读取一次,后者只在登陆时读取一次。我的习惯是加到 ~/.bashrc 中,在该文件的未尾,可采用如下语句来使设置生效: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 修改完后,记得关掉当前终端并重新打开一个新的终端,从而使上面的配置生效。

就是说,你修改了 ~/.bashrc 后,只能是打开当前 Shell 的当前用户才能配置那个共享库。

而 Supervisor 是在没有登陆前使用的,更何况 sudo 是不引入 LD_LIBRARY_PATH 的。

我不是通过正常途径安装 sqlite3 的,而是通过编译方式安装的,我该怎么办呢?

8.天无绝人之路

看过很多资料,有的说可以重新编译,但我觉得这很麻烦嘛,于是我找到了一个更好的办法。

linux 环境变量设置方法总结(PATH / LD_LIBRARY_PATH)

这下就完事了。

直接运行,爽快。

9.遇事需冷静

所有的事情,碰到了,我们没有办法逃避,但是我们可以勇敢面对。

例如死亡。