Supervisor 配置 Django 被 Sqlite3 在 LD_LIBRARY_PATH 上坑了

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

 

小秉子关注

2020.02.06 12:06:55字数 900阅读 29

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.遇事需冷静

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

 

0人点赞

 

三世书记录

 

方法三:这个没有修改LD_LIBRARY_PATH但是效果是一样的实现动态库的查找, 
         1. /etc/ld.so.conf下面加一行/usr/local/mysql/lib
         2. 保存过后ldconfig一下(ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.)
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章