🔭
renderなるものを使ってみた
色々ハマったので、メモしておく
Herokuが有料化されたことになり、代替手段として、renderなるものが話題になっていて、デプロイするのをやってみました。しかし、デプロイに失敗して原因を調べてみたとこと、今回だとPythonならではのルールがあったみたいです。
ソースコード
最初は、main.pyでやってましたが、エラーの原因になるそうで、app.pyに変更しました。
app.py
from flask import Flask, request, json, jsonify
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
tasks = {
'1': 'スーパーで買い物をする',
'2': 'Netflixを見る'
}
@app.route('/tasks', methods=['GET'])
def list_all_tasks():
json = {
'message': tasks
}
return jsonify(json)
@app.route('/tasks/<int:taskid>', methods=['GET'])
def show_task(taskid):
taskid = str(taskid)
json = {
'message': tasks[taskid]
}
return jsonify(json)
@app.route('/tasks/<int:taskid>', methods=['DELETE'])
def delete_task(taskid):
taskid = str(taskid)
if taskid in tasks:
del tasks[taskid]
msg = 'Task {} deleted'.format(taskid)
else:
msg = '{0} is not in tasks.'.format(taskid)
json = {
'message': msg
}
return jsonify(json)
@app.route('/tasks', methods=['POST'])
def create_task():
taskid = str(int(max(tasks.keys())) + 1)
posted = request.get_json()
if 'task' in posted:
tasks[taskid] = posted['task']
msg = 'New task created'
else:
msg = 'No task created'
json = {
'message': msg
}
return jsonify(json)
@app.route('/tasks/<int:taskid>', methods=['PUT'])
def update_task(taskid):
taskid = str(taskid)
posted = request.get_json()
if 'task' in posted and taskid in tasks:
tasks[taskid] = posted['task']
msg = 'Task {} updated'.format(taskid)
else:
msg = 'No task updated'
json = {
'message': msg
}
return jsonify(json)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5001)
render側でパッケージをインストールする設定
requirements.txtに、Pythonで使用するパッケージ名を書いておく必要があります。Gunicornというパッケージは、デフォルトでapp.pyを探しにいくので、main.pyでコードをデプロイすると失敗する原因になっていた。
Flask
Gunicorn
失敗したときのログ
修正をすると、エンドポイントにアクセスすると、JSONのデータが表示された。こちらのURLをポストマンで、GETすると、データを取得できました🥳
まとめ
今回、学習の参考になったサイトのリンクを載せておきます。もしずっと起動しているサーバーが欲しいなら、他のサービスを検討したほうが良いと思われます🤔
Discussion