SQLite3のテーブルが存在しない場合作成するっていう “create table if not exists~” がエラーで実行できませんでした。どうやらCentOS7のSQLite3のバージョンが3.7.xxで古かったようです。
開発機の方はv3.29.0だったのですが最初なんで動かないのかわかりませんでした。
バージョン差に気づいてとりあえず2020/5/12時点の最新のv3.31.1を入れることにしました。
SQLite3バージョンアップ手順
バージョンアップの手順はこちらを参考にしました。
簡単に手順のみ抜き出します。
$ wget https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz $ tar xvfz sqlite-autoconf-3310100.tar.gz $ cd sqlite-autoconf-3310100 $ ./configure --prefix=/usr/local $ make $ sudo make install $ /usr/local/bin/sqlite3 --version 3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6 $ /usr/bin/sqlite3 --version 3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668 $ sqlite3 --version 3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6 $ sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3_old $ sudo ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3 $ vi ~/.bashrc # 以下を追記する export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
Pythonからバージョン確認
SQLite3はPythonから使用していたのでPythonでのバージョンを確認します。
python3 Python 3.7.4 (default, Aug 11 2019, 10:43:21) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sqlite3 >>> sqlite3.sqlite_version '3.31.1'
systemd 環境変数
これでバージョンは上がったのですが、一つ問題が出ました。
作成したアプリはsystemdで起動していたのですがそこから起動するとバージョンが前のままなのです。
環境変数がうまく設定されていないようなのでsystemdのユニットファイルに環境変数を設定します。まずは環境変数設定用のファイルを作成します。
$ vi /etc/sysconfig/xxx.env # 以下を記載 LD_LIBRARY_PATH=/usr/local/lib
次に/etc/systemd/systemにあるxxx.serviceを開き、[Service]に “EnvironmentFile=/etc/sysconfig/xxx.env” を追加します。
[Unit] Description = nanana [Service] User=root EnvironmentFile=/etc/sysconfig/xxx.env WorkingDirectory = /home/nanana/nonono/ ExecStart = /usr/local/bin/python3 /home/nanana/nonono/python.py Restart = always Type = simple [Install] WantedBy = multi-user.target
これで $ systemctl restart xxx.service を実行すれば v3.31.1 のSQLite3を使用できます。
コメント