このブログはロリポップで運用しています。
公式にSQLite3の使用も許可されていて、モジュール叩けば動くんですがいかんせんバージョンが低い。
確認するとバージョンが3.7.17。なかなかに古いです。
そのせいで、WITH句やウィンドウ関数を使おうとすると未サポートでエラーを吐きます。
それも具体的に教えてくれればいいんですが、とにかく「未知の構文です」みたいなエラーになるので、手元の環境では動くのにサーバーにアップロードしたら動かなくなる、みたいな状態に陥ります。
そこで、SQLite3のバージョンを上げたくなるんですが、何分レンタルサーバーなので勝手が効かない。
と思いきや、AWS Lambdaで同じ現象にハマった先人がいて、既に解決策が提示されてます。(AWS LambdaのSQLiteバージョンが古い問題の解消)
なのでこのブログの通りに作業すれば万事解決、というわけですが、いくつか注意点が。
そもそもpython向けの記載だ
ロリポップのサーバーでなにか作る時に、python使おうという人は中々いない気がします。ふつうはphpでは。
しかしphpでSQLite3のバージョンをいじる方法がわからないので、やりたいならpythonで書くしかない。
pythonスクリプトを動かすのも少しノウハウ要るので、以下ページを参考に動かすと良いです。
ロリポップでPythonのCGIスクリプトが動かない場合の対処法
また、Content-Typeヘッダを自分で吐かないとエラーになるのでコレも注意。
print('Content-Type: text/html; charset=utf-8\n')
とかをどこかに埋め込むと良いです。
バージョンの合ったモジュールを手元で展開する必要がある。
参照元のページでは
$ pip install pysqlite3-binary -t ./package_for_layer
とか書いてさらっと流してあるんですが、
これには幾つか省略がありまして。
- 手元の環境のPythonのバージョン合わせないとだめ
- 手元の環境がLinuxじゃないとだめ
というわけで、Windows端末上にpython入れて動かしていると割とハマります。
どこからかLinuxの環境もらってきてpythonのバージョン変える必要があります。
自分はWSLベースでやりました。以下が参考になります。
そういう紆余曲折あった結果、なんとかロリポップ上でpysqlite3-binaryが動くようになったので、とてもよかったなという話でした。