У меня есть простое фляжное приложение, работающее на героку:
from flask import Flask
app = Flask(__name__)
@app.route('/test', methods=['POST'])
def test():
return 'OK'
Невероятно, это удается или нет, в зависимости от размера отправляемого json. Вот тестовый код:
import json, random, string, requests
def rand_string(size):
return ''.join([random.choice(string.letters) for i in xrange(size)])
for size in (4000, 10000):
r = requests.post('http://my-app.herokuapp.com/test',
data=json.dumps(rand_string(size)),
headers={'content-type': 'application/json'})
print r.status_code
При первом вызове он возвращает статус 200, при втором http статус 503 с кодом ошибки heroku H13.
2014-09-18T08:23:46.594543+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path="/test" host=my-app.herokuapp.com request_id=91b1cd91-5a4f-445e-ad52-3c64733154b3 fwd="12.34.56.78" dyno=web.1 connect=5ms service=13ms status=503 bytes=0
HTTP-ответ 503 означает:
сервер в настоящее время не может обработать запрос из-за временной перегрузки или технического обслуживания сервера
Этого не может быть, так как сервер запущен и работает без нагрузки, кроме моих ручных тестов.
В документации по коду H13 от Heroku говорится:
Эта ошибка возникает, когда процесс в вашем веб-дино принимает соединение, но затем закрывает сокет, ничего не записывая в него.
Однако все, что делает код, это return 'OK'
, так что это не код.
Ограничивает ли heroku размер запросов? Есть ли gunicorn?
Как узнать и как настроить иначе?