pkgから3.6.8のバージョンをインストール pkgファイルからのインストール方法
Python3.6.8のインストール場所を確認
which python
pip3をインストールするために、brewでpythonをインストール
brew install python
virtualenvインストール
pip3 install virtualenv
仮想環境作成
virtualenv --python=/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 env
バージョン確認
python
下記であれば問題ない
Python 3.6.8 (v3.6.8:3c6b436a57, Dec 24 2018, 02:04:31)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
仮想環境の中に入る
source bin/activate
実施することは、下記3点
- Line Developerアカウント作成
- チェンネル作成
- bot作成
下記手順にしたがって、「Flaskを使ってLINE botを作成」まで進める。 FlaskでLINE botを実装し,herokuにdeployするまで
以下から仮想環境ないに入った状態とする。
$ pip install flask
$ pip install line-bot-sdk
$ brew cask install ngrok
使用するSDK:line-bot-sdk-python homebrew-caskとは
pip3 install python-dotenv
Flaskにおける設定ファイルのベストプラクティス
【GitHub】に載せたくない環境変数の書き方 Python
app.py
に下記を追記し、ルートパスにアクセスし、hello world!
が表示されることを確認する。
@app.route("/")
def hello_world():
return "hello world!"
flask実行コマンド
flask run --host=0.0.0.0
Lineのテストを行う場合には、Webhookにテスト用のURLを入力する必要がある。
この際、https
のYRLが必須になり、その時に便利なのが、ngrok
。
httepsでローカルの開発を公開することができます。
詳しくは下記で確認してみてください。
ngrokが便利すぎる
下記2つを実行する
flask run --host=0.0.0.0
ngrok http 5000
※ngrokのアドレスは、起動するたびに変更される。
$ brew install heroku/brew/heroku
# ブラウザが表示されるので、そこでログイン
$ heroku login
下記3つを新規で作成する
-
requirements.txt
今仮想環境に入れているバージョンをfeeze
を使って、requirements.txtに書き出します。 Python, pip list / freezeでインストール済みパッケージ一覧を確認 -
runtime.txt
Pythonのバージョンを記載する。 -
Procfile
web: gunicorn app:app --log-file -
WSGI について Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳)
NginxはリクエストをUnicornに渡します。
UnicornはリクエストをRackに渡します。
RackはリクエストをRailsのrouterに渡します。
routerはリクエストを適切なcontrollerに渡します。
そしてレスポンスが逆の順番で返されます。
heroku create [app名]
git push heroku master
heroku
は、git
感覚で使えば良い。
# 環境変数一覧
$ heroku config
# 環境変数追加
$ heroku config:set ENV_NAME=value
heroku run bash
Heroku コマンド集
下記を実装することで、Beacon Event発生時になんのアクションを行うかを定義することができる。
イベントを変更する場合は、@handler.add(BeaconEvent)
の引数(BeaconEvent
)を変更する。
なので、下記のプログラムはイベント後をどのようにハンドルするかを記載する。
イベント発生条件は、Line側で実装されている。
# Beaconイベント発火
@handler.add(BeaconEvent)
def handle_beacon(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='Hello World'))
上記の実装は、デコレータを使用しています。
デコレーターを使うことで、ライブラリとして提供されている関数を呼んだときに自動的に実行される処理を付加できるということになります。 Pythonのデコレータについて
handler = WebhookHandler(channel_secret)
# WebhookHandlerクラスをchannel_secretで初期化
handler.handle(body, signature)
## handleメソッドの挙動
# WebhookHandlerクラスのhandleメソッド実行
# WebhookParserクラスのparseメソッド実行
# bodyにeventが入っているので、eventsにappendし、eventsを返す
# eventsをfor文で回す
## decoratorの挙動
# addメソッドが呼ばれる
# decoratorを返す
# この時に,app.pyで実装している handle_messageメソッドが呼ばれる
# decoratorメソッドのなかで、__add_handlerメソッドが呼ばれて、_handlersとかにvalueがはいる
# WebhookHandlerクラスのaddメソッドがデコレートされており、decoratorが呼ばれる
# __add_handler呼ばれる
[わからないところ]
どこでaddメソッドが実行されているのかわからない
handle_messageメソッドを呼ばずとも実行できているので、handleメソッドのどこで実行されているかわからない
下記が参考になる。 Flask + SQLAlchemyプロジェクトを始める手順
モデルファイルからマイグレーションファイルを自動生成してくれる。 Flask-Migrateに関して自分の言葉で
ローカルでの実行
# データベースのリビジョンを、マイグレーションを実行せずに、引数として指定されたリビジョンに設定します。
$ flask db stamp head
$ flask db migrate
$ flask db upgrade
Herokuへの実行
heroku run FLASK_APP=app.py flask db stamp head
heroku run FLASK_APP=app.py flask db migrate
heroku run FLASK_APP=app.py flask db migrate