Я бы лучше использовал данные, предоставленные в X-Shopify-Shop-Api-Call-Limit
и Retry-After вместо добавления фиксированного сна.
Gem Shopify API Retry *1006* делает это. Он смотрит на заголовок Retry-After
, но использует фиксированный сон. Спать нельзя. Как еще ждать?
Это не делает никаких "исправлений обезьян". Это хорошо. Исправление обезьяны, вероятно, вызовет проблему в некоторый момент.
Для использования с вашим кодом
products = ShopifyAPIRetry.retry { ShopifyAPI::Product.find(:all, :params => {:limit => limit}) }
products.each do |product|
variant = ShopifyAPIRetry.retry { ShopifyAPI::Variant.find(product.variants.first.id) }
variant.price = price
ShopifyAPIRetry.retry { variant.save }
inventoryitem = ShopifyAPIRetry.retry { ShopifyAPI::InventoryItem.find(product.variants.first.inventory_item_id) }
inventoryitem.cost = cost
ShopifyAPIRetry.retry { inventoryitem.save }
end
Необходимость звонить retry
везде не так уж и приятно. Вы могли бы объединить некоторые места в один звонок.