WebARENAでUbuntuサーバを立てる(4)

Flask環境のデバッグ方法

サーバ側はFlaskで構築しましたが、Flaskの本番環境だといまいちエラーがどこででているのかわかりにくく、デバッグに難儀することが見えてきました。

そこで、ローカル環境でテストする方法を確認しました。

ローカル環境の構築

以下の手順でpythonの仮想環境でローカル環境を作ります。

~$ cd python/
~/python$ python3 -m venv example
~/python$ source ./example/bin/activate
(example) ~/python$ cd example/
(example) ~/python/example$ pip install --upgrade pip
(example) ~/python/example$ sudo apt install mosquitto-clients ← MQTTを動かす必要がある場合
(example) ~/python/example$ pip install paho-mqtt              ← MQTTを動かす必要がある場合
(example) ~/python/example$ pip install Flask
(example) ~/python/example$ pip install Flask-HTTPAuth

ソースのコピー

app ディレクトリの下をまるごと持ってきます。まるごとではなく、一部だけ持ってくる場合には、不要な Blueprint の呼び出しをコメントアウトします。

例:
  #from appA.appA import appA
  #app.register_blueprint(appA)

なお、MQTTでのデータ引き取りまで含めてローカルでテストする場合には、subscribe を行う関数を以下のようにしておくことで、サーバ環境なのか、リモートのデバッグ環境なのかを切り分けます。

import ssl,socket	# デバッグ用
HOSTNAME = 'i-xxxxxxxx'	# 本番サーバのホスト名
  :
  :
def subscribe():
	while True:
		client = mqtt.Client()
		client.username_pw_set('ユーザー名', password='パスワード')
		client.on_connect = on_connect
		client.on_message = on_message
		# 環境によって振り分けるためにホスト名を判定する
		if socket.gethostname() == HOSTNAME :
			# 本番時
			client.connect('localhost', 1883, keepalive=60)
		else :
			# デバッグ時
			client.tls_set(cert_reqs=ssl.CERT_OPTIONAL,tls_version = ssl.PROTOCOL_TLSv1_2)
			client.tls_insecure_set(False)
			client.connect('example.com', 8883, keepalive=60)
		client.loop_forever()

テスト環境の起動

テスト環境の起動は

(example) ~/python/example/app$ python app.py

として起動します。必要なら、subscribe を行うプログラムを別のシェルを起動してから

(example) ~/python/example/app$ python app_sub.py

として MQTT のsubscribeを行うプログラムも起動します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)