☆☆ 新着記事 ☆☆

2018年11月22日木曜日

Python Anywhereで FlaskをDeployしてみる。

以前,「( !! これで動く !! )ロリポップ・サーバーでPython Flaskを動かしてみる 」という記事を書いたが、実は、これでは全くFlaskでアプリ開発なんてできない事が分かった。

これはロリポップだけではなく、さくらにしても他のシェアード・サービスでも、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

Package      Version------------ -------Click        7.0    Flask        1.0.2  itsdangerous 1.1.0  Jinja2       2.10   MarkupSafe   1.1.0  pip          18.1   setuptools   40.6.2 Werkzeug     0.14.1 wheel        0.32.3

今回は、とりあえず これで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/ユーザー名/mysite で作成されます。 このmysite.app ディレクトリーの下に、flask_app.pyが作られているのいるので、簡単なappファイルであれば、このファイルを編集しても良いですね。

Webappが作成されました。




ファイル Tabで、mysiteディレクトリが作成されていることを確認します。

/home配下には、/local や /virtualenv があります。




Step4. Web APPの詳細設定

1) VirtualenvのPathの設定
 
次に、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 件のコメント:

コメントを投稿