Herokuのサーバーはスリープします
Herokuの無料枠では30分サーバーにアクセスがないとサーバーがスリープしてしまいます。
これを阻止する方法はいくつかあります。
- Herokuに課金する
- アドオンを追加する
- Google apps scriptなどで定期的にアクセスする。
今回はDjango側でスリープを阻止する方法を紹介します
仕組み
今回の方法は、サーバーのスタート時に別スレッドで定期的に自サーバーにアクセスするというものです。
wsgi.py
に別スレッドで定期処理を実行するようにコードを書きます。参考
実装
wsgi.py
import os
import threading
import requests
import time
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hoge.settings")
application = get_wsgi_application()
def awake():
while True:
try:
print("Start Awaking")
requests.get("http://hogefuga.herokuapp.com/")
print("End")
except:
print("error")
time.sleep(300)
t = threading.Thread(target=awake)
t.start()
このコードでは300秒(5分)間隔で自サーバーにアクセスしています。
これでサーバーのスリープを阻止できます。