さくらのレンタルサーバで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モジュール側で受け取れなかったりしたので、適宜コメント化している。