Таймаут шлюза 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 будет полезен.

Вернуться на верх