Qiitaに投稿されている記事でRender使えば簡単にWebサービス公開環境を作れるよっていうのを読んで、早速試しにやってみたわけです。
あまり複雑なヤツだと何が原因で失敗しているかがよくわからんくなるので、今回はごぐごく簡単なflaskを使ったのをデプロイしてみました。
資源はGithubにあるので、そいつを使ってちょいちょいとできるもんだと思ってたけれど、ちょっと失敗した部分があったから、そいつを忘れないように今回は忘備録ってことで書いてます。
今回デプロイしようとしたレポジトリの構成は以下の通り。
main
|
- app
| |
| - hazardmap.py
| - requirements.txt
|
- templates
|
- foliumで作成したハザードマップ表示するためのhtmlファイルがいくつか保存
上のリンクした投稿にあるのは"hello world!"を表示する簡単なソースコード事例なので、すべてのflask環境はmainブランチの下に保存されていますが、私がデプロイしようとした環境ではシェープ形式ファイルだの色々とごちゃ混ぜで保存しているため、ソースはmain配下の別フォルダに保存していますので、Renderの環境指定で少し調整が必要であり、かつソースプログラム名が一般的なappではないので、その点についても私みたいな初心者には事例とことなる点で混乱のタネになるのではと思いメモを残します。
from flask import Flask,render_template,request,abort
app = Flask(__name__)
@app.route('/',methods=['GET', 'POST'])
def map():
## 以下、ゴニョゴニョと処理が続く
## おまじない
if __name__ == "__main__":
app.run(debug=False)
ルートディレクトリの指定ができるので上にあるリポジトリ構成に従って、以下の通り指定します。
デフォルトだともちろんrootなので、Root Directoryの指定はその下にあるappを指定します。
app
リンク先のサイトでgunicornを起動するためのStart Command記述について
これはwebアプリを起動するためのコマンドになります。
Flaskでwebアプリを作成していればgunicorn app:app
って書いてありますが、このどちらのソース名(今回はhazardmap.py)にするかでちょっと悩みましたが、この記述に2つappがあるけれど、左のほうがソース名で右がソース内に記述したflaskのオブジェクト名です。
なので
gunicorn hazardmap:app
となります。ここで私はhazardmapの拡張子(hazardmap.py)までくっつけて書いたらデプロイエラーとなりました。事例を見れば拡張子いらないのは丸わかりだから私のケアレスミスですが、デプロイエラーメッセージだけではよくわからなかったからこいつも忘れないように書いときます。
なおRender環境でPythonのWebサービスを動かす時にはサーバ機能にgunicornを使うらしいのでスタート時にgunucornを起動させるとの事。
最後にRenderのサイトをみるとPostgreSQLが使えて、ぐぐってみると無償で使えるっぽい雰囲気でGoogle Cloud Platformでデータベースの利用料について悩んでたから、無償で喜んでたんだけど、最近レギュレーションが代わって90日まで無償でそれ以降は有料契約じゃないと使えなくなったみたいでした。(データベース利用のみ有料契約が必要。最安が月額$7だったかな)
残念ですね。データベースが無償ならば続けてDjangoで作ったくま発見報告のやつをデプロイしようとしたけれど、これまたデータベースの利用料をどうしようかってことで一旦中止です。
とりあえずブラウザで確認できるハザードマップを作ってみたっていうサイトはこちら
foliumで事前につくったhtmlを表示しているだけです。河川氾濫範囲はデータ量が多くて重たいので開くには時間がかかりますから表示まで根気よく待っててね。