さくらのレンタルサーバでFlask使ってWebAPI作ったときの備忘録

さくらのレンタルサーバでPython, Flask, MySQLを使ってWebAPIを作ったが、その時に手間取ったことを備忘録として残す。

pyenv install --list で表示されるバージョンを導入できないことがある

Python3系の導入と、pyenv、pyenv-virtualenvを使って仮想環境を構築する。
pyenv : Pythonのバージョンごとに環境を作成するもの
pyenv-virtualenv : 同じバージョンで複数の環境作成や管理するもの

こちらのサイトが一番参考になった。→ サクラのレンタルサーバでPython3が使えるようにする
あと、こちらのサイトもよく参照した。→pyenvとpyenv-virtualenvの自分流使い方

注意すべきは、pyenv install --list でリスト表示されるバージョンが、必ずしも正常に導入できるとは限らないことだ。私のやり方に問題があるのかもしれないが、最新Verだとエラーが発生し、少し古いVerだとうまくいった。
(3.10.2だとエラーとなり、3.9.10でうまくいった)

Flask環境構築時のindex.cgiは柔軟に改編の必要あり

Flask環境構築の参考サイトはこちら。→【さくらレンタルサーバー】flaskを使ってみる。
私の環境の index.cgi は以下。

[ index.cgi ]

 1!/home/mydomain/.pyenv/versions/3.9.10/bin/python
 2
 3import cgitb
 4cgitb.enable()
 5
 6from wsgiref.handlers import CGIHandler
 7from sys import path
 8
 9path.insert(0, '/home/username/src/')
10from GetLicenseInfo import app
11from GetLicenseInfo import dummy1,dummy2,dummy3
12class ProxyFix(object):
13  def __init__(self, app):
14      self.app = app
15  def __call__(self, environ, start_response):
16      environ['SERVER_NAME'] = "mydomain.sakura.ne.jp"
17      environ['SERVER_PORT'] = "80"
18#      environ['REQUEST_METHOD'] = "GET"
19      environ['SCRIPT_NAME'] = ""
20#      environ['PATH_INFO'] = "/"
21#      environ['QUERY_STRING'] = ""
22      environ['SERVER_PROTOCOL'] = "HTTP/1.1"
23      return self.app(environ, start_response)
24if __name__ == '__main__':
25   app.wsgi_app = ProxyFix(app.wsgi_app)
26   CGIHandler().run(app)

正直、index.cgi のProxyFixクラスについては理解できていないが、REQUEST_MOTHODが設定されているとPOSTリクエストを受けつけなかったり、PATH_INFOの設定があると呼び出し側のFlaskモジュールのルート設定(@で指定するパスのこと)が効かなかったり、QUERY_STRINGを設定しているとGETリクエスト時のパラメータがFlaskモジュール側で受け取れなかったりしたので、適宜コメント化している。

関連ページ