Таймаут шлюза 504 в производстве для конечной точки API Django с API Meta Products Feed, но работает локально
Я работаю над API Django, который интегрируется с Meta API для фидов продуктов WhatsApp. Эта конечная точка отлично работает на моей локальной машине, но когда я развертываю ее на производстве, она возвращает ошибку 504 Gateway Timeout.
Подробности:
Локальный запрос (работает):
curl -X POST http://127.0.0.1:8000/api/whatseat/save-changes/ -d "business_id=2"
Запрос на производство (504 Gateway Timeout):
curl -X POST https://<production-url>/api/whatseat/save-changes/ -H "Authorization: Token <token>" -d '{"business_id": 2}'
Ключевые наблюдения:
- Ошибка возникает только в продакшене - локально конечная точка работает нормально.
- Когда эта конечная точка вызывается без необходимых данных WhatsApp, она корректно возвращает запрос на завершение настроек. Таким образом, проблема, по-видимому, возникает во время внешнего API-запроса к Meta (WhatsApp) API.
def post(self, request):
business_id = request.data.get('business_id')
try:
whatsapp_business = WhatsApp.objects.get(business=business_id)
except ObjectDoesNotExist:
return Response({"message": "Complete WhatsApp setup in settings"}, status=400)
access_token = whatsapp_business.access_token
product_catalog_id = whatsapp_business.catalog_id
if not all([access_token, product_catalog_id]):
return Response({"error": "Missing Access Token or Catalog ID"}, status=400)
# External API request (seems to be the timeout issue in production)
try:
product_feed_data = request.build_absolute_uri(reverse('get-product-feeds'))
response = requests.get(product_feed_data, params={
'access_token': access_token,
'product_catalog_id': product_catalog_id
})
response.raise_for_status()
except requests.RequestException as e:
return Response({'error': str(e)}, status=500)
# Other logic...
(contains another call to graph api for uploading the new data feed)
Попытки стрельбы:
Локальное и производственное тестирование: Локально конечная точка работает без проблем.
Изоляция ошибок: Подтверждено, что таймаут, скорее всего, связан с запросом API Meta Products Feed.
Что может вызвать таймаут шлюза 504 при доступе к API Meta Products Feed на производстве, но не локально? Может ли это быть связано с различиями в конфигурации сервера или сети, или со специфическими требованиями к Meta API в производстве? Любой совет по решению проблемы таймаутов API в Django будет полезен.