Запрос AJAX завершается по тайм-ауту через 1 минуту

Некоторое время назад я создал плагин для Discourse, который через ajax вызывает метод контроллера и возвращает результат. Этот конкретный запрос мог выполняться несколько минут, и всё работало нормально.

Однако теперь, спустя долгое время, я попробовал запустить плагин в текущей версии Discourse и столкнулся с проблемой: запрос прерывается через 1 минуту.

Вот как выглядит код:

ajax("/my-plugin/import", {
        type: "POST",
        data: {
          categoryId: this.categoryId,
          otherData: ...
        }
      }).then((result) => { ... });

А вот сообщение об ошибке, которое я вижу через 1 минуту:

Discourse Ember CLI Proxy Error

FetchError: request to http://127.0.0.1:3000/my-plugin/import failed, reason: socket hang up
at ClientRequest. (file:///src/app/assets/javascripts/node_modules/node-fetch/src/index.js:108:11)
at ClientRequest.emit (node:events:526:35)
at Socket.socketOnEnd (node:_http_client:525:9)
at Socket.emit (node:events:526:35)
at endReadableNT (node:internal/streams/readable:1359:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

Мне нужно понять, почему такое поведение изменилось за последний год? И есть ли возможность изменить настройку тайм-аута?

Я не думаю, что здесь были какие-либо недавние изменения. Бэкенд Discourse настроен на тайм-аут запросов через 60 секунд в режиме разработки или через 30 секунд в продакшене. discourse/config/unicorn.conf.rb at cdcf53573d5eb85254913d25a9ee118a5df7c2f2 · discourse/discourse · GitHub Похоже, что в режиме разработки это можно настроить через переменную окружения UNICORN_TIMEOUT. Однако в продакшене значение жёстко задано как 30 секунд.

Возможно, вы захотите запланировать задания для обработки импорта.

В итоге я переписал его так, чтобы импорт выполнялся в рамках запланированной задачи, что оказалось гораздо лучше.