2016-10-06 3 views
0

Я вставляю примерно 4000-5000 записей подряд, в среднем запросы вставки отправляются в пределах 1 мс каждый непрерывно, пока не будут добавлены все записи. Весь импорт заверяется в одну транзакцию. Задание не выполняется со следующей ошибкой:Слишком много запросов ActiveRecord

ActionView::Template::Error (Failed. Response code = 429. Response message = Too Many Requests.): 

Я проследил ошибку вплоть до моего model.create заявления. Я знаю, что нет возможности вставлять сразу несколько записей с помощью ActiveRecord, так что можно увеличить количество запросов, которые я могу сделать за короткий промежуток времени? Или мне нужно использовать драгоценный камень для вставки нескольких записей одновременно? то есть activerecord-import

Я уверен, что если я поймал ActionView :: Template :: Error и отступил на несколько секунд, прежде чем повторить попытку, это сработает, но есть ли другой способ сделать это?

+0

Можете ли вы подробно рассказать о том, что задача, которую вы на самом деле пытаетесь решить? Зачем вам нужно вставить 4000 записей в один запрос? – max

+0

Этот импорт работает только раз в то время, он в основном берет большое количество записей из внешнего API и сохраняет его в нашей базе данных. Данные из внешнего API поступают на страницы, но в настоящее время мы получаем все страницы и сохраняем все за один раз, так что это атомный. – user6689604

+0

Возможно, вы захотите использовать инструмент для массового вставки, если вы часто это делаете. – tadman

ответ

0

Как выясняется, эта ошибка не имеет ничего общего с нашим собственным сервером. Одна из частей, которые мы импортируем, - от Shopify. После мониторинга HTTP-трафика я понял, что когда вы получаете заказ и пытаетесь получить транзакции, связанные с этим заказом, это дополнительный запрос. Таким образом, мы пытались сделать слишком много запросов и попали в их лимит API.

0

Считаете ли вы, что используете фоновое задание для этого? В зависимости от того, какую базу данных вы используете, вы можете вставлять новые данные одновременно.

+0

Не уверен, что я понимаю, но почему справочная работа поможет обойти слишком много ошибок запросов? Вы хотите подавить запросы в фоновом режиме? – user6689604

+0

Похоже, вы нашли ошибку. :] Можно использовать фоновые задания для дросселирования, если хотите. – charleschanlee

+0

Я обязательно посмотрю на фоновые задания, я рассматривал возможность использования delayed_job, есть ли у вас какие-либо рекомендации? – user6689604

0

Это обычно происходит, когда один из методов сам вызывает другой метод в рекурсивном способах .

Так что, если у меня есть redirect_to в одно действие, которое снова посылает redirect_to к тому же action..so в свою очередь, это которые приводят к Слишком много ошибок запроса ..

То же самое относится и к оказанию partials который сам имеет частичную визуализацию родителя, где родительский вид представляет дочерний элемент, который также является частичным из родителя . .. и это становится рекурсивным циклом.

Надеется, что это помогает :)

+0

Во время импорта ничего не отображалось, но, как оказалось, это было совершенно не связано с нашим собственным сервером. Спасибо за ваш ответ, хотя! – user6689604

Смежные вопросы