これはロリポップだけではなく、さくらにしても他のシェアード・サービスでも、cgi経由でFlaskを動かす場合は同じ問題だと思う。
(そういう意味で、「Flaskが動いた」と書いているブログは、ほぼ検索可能な範囲で、どのサイトも問題解決をしていないので、(少なくとも書いていない)どうしているんだろう?)
詳しくは、今度、書こうと思うけど、ということで、きちんとFlaskの機能を使えるホスティング・サービス(できれば無料)を探していて、結局、難しくて避けていたPython Anywhere が妥当であろう、という見解に達したので、まじめにPython Anywhereを使ってみることにする。
無料アカウントで作業します。 アカウント作成は直観でできますので説明しません。
Step1) Virtual Environmentの作成。
Dashboard -> Console -> bashを選んで編集します。
bashをクリックすると、console画面が出てくるはずだけど、IEでは出てきませんね。
ここからは、ブラウザをchromeに変更。
そして以下のコマンドを記述。
mkvirtualenv <env-name> -- python =/usr/bin/python3.6
~ $ mkvirtualenv flaskapp --python =/usr/bin/python3.6
(公式チュートリアルは、mkvirtualenv --python=/usr/bin/python3.6 flaskapp)
こんなコンソール画面になる。
flaskのインストール
(flaskapp) ~ $ pip install flask
* flaskappディレクトリでinstall
(プロジェクト名)のプロンプトが出ていると、virtural環境がactiveになっている証拠。
このメッセージが最後に表示される
Successfully installed Jinja2-2.10 MarkupSafe-1.1.0
Werkzeug-0.14.1 click-7.0 flask-1.0.2 itsdangerous-1.1.0
flaskのオプション・パッケージが必要な場合は、この段階で以下のように
追加すればよい。
~ $ pip install flask -SQLAlchemy
この時点で、インストールされたパッケージを確認してみる。
(flaskapp) ~ $ pip list
今回は、とりあえず これでexit。
~ $ exit
あれ? コンソールが保存されてないぞ? なんか保存作業をしないといけない?
さて、さて、インストールが出来ているかは、ダッシュボードのファイルから以下のように確認できますね。
ふむ、プロジェクトは作られているので次にすすむ。
Step 2: Uploadするflaskのappファイルを作る。
今回はシンプル版。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
sum = 3 + 2
return str(sum)+"<h1> Now sum calc. is done by Flask App!</h1>"
if __name__ == '__main__':
app.run()
if __name__ == '__main__':
app.run()
は、無くても良い。 寧ろ、書く場合には app.run() がif文の中にしっかりと
入っていることが必要。 app.run()だけを書いて実行することもローカル環境では可能だけど、
以下の venv 環境を設定した後で実行した時に、app.run()を読み込むと
appがクラッシュして、サーバーから504エラーが返ってくることになる。
さて、これをアップロードする。
virtualenvironment のディレクトリー配下にmyapp ディレクトリーを作る。
このmyappデイレクトリーを選択して、ファイルをアップロード。
Step3 新しいWeb Applicationを作成する。
ダッシュボードのWebタグから新しいアップを追加します。
インターネットに公開されるURLが表示されます。
次に、以下を選択しながら、ページを進めていきます。
・Python Web frameworkの選択
> Flaskを選択
・Select a Python versionの選択
> Python 3.6 を選択すると、PATHの選択画面になりますが、とりあえずDefaultのまま
進めます。
DefaultのPathは、
/home
次に、virtualenvのPath設定。
(踏む、virtualenv wrapperを使うことが推奨されてるんですね。次回以降にやってみる。)
今回はマニュアルで入力。
/home/kappamobestjp/.virtualenvs/flaskapp
(ファイル名だけを入れて、レ点青〇をクリックすると
自動でパスを書いてくれますね。このやり方は便利)
2. wsgi.py の修正
(上記のPathが記述されていますので、実際のもに変更します。)
import sys
# add your project directory to the sys.path
project_home = u'/home/Kappamobestjp/myapp'
if project_home not in sys.path:
sys.path = [project_home] + sys.path
# import flask app but need to call it "application" for WSGI to work
from myapp import app as application # noqa ♯defaultのflask_app.pyからの変更。
これでおしまいです。
そしてOutput:
ここまでは、CGI経由でもできる。
CGI経由では出来ない、Routingをするアプリを動かしてみる。
app.py
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def first():
message="Hi, Charlie!"
return render_template("sample01.html", message=message)
@app.route('/add',methods=['POST'])
def add():
if request.method =='POST':
result = request.form['new_wish']
#else:
# result = "No wish! Ah?"
return render_template("sample02.html", result=result)
if __name__ == '__main__':
app.run()
動いた!!
参考)
◆公式
(Quick Start: virtualenv なし)
https://blog.pythonanywhere.com/121/
(virtualenv あり)
Setting up Flask applications on PythonAnywhere
◆Deploy (Host) Flask web app on pythonanywhere
https://www.youtube.com/watch?v=uWoY3jcrQTo
◆Deploying Flask Apps Using Python Anywhere
https://www.youtube.com/watch?v=M-QRwEEZ9-8
0 件のコメント:
コメントを投稿