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,此文件保存已排好序的動態鏈接庫名字列表.)
 

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