Search code examples
ruby-on-railscsvrakeshopify

Rake task handle 404


I am using a rake task to take data from one csv, call the shopify api using that data, and save the response to another CSV. The problem is I have no error handler in place so that if the shopify api cannot find the resource I provided, the whole task gets aborted. What is the best way to handle the error so that if the resource is not found in Shopify, simply skip it and proceed to the next row?

The line calling the shopify API in the code below is:
variant = ShopifyAPI::Variant.find(vid)

namespace :replace do
    desc "replace variant id with variant sku"

    task :sku => :environment do
        file="db/master-list-3-28.csv"
        newFile = Rails.root.join('lib/assets', 'newFile.csv')
        CSV.open(newFile, "a+") do |csv|
            CSV.foreach(file) do |row|

                msku, namespace, key, valueType, value = row
                valueArray = value.split('|')
                newValueString = ""

                valueArray.each_with_index do |v, index|

                    recArray = v.split('*')
                    handle = recArray[0]
                    vid = recArray[1]
                    newValueString << handle
                    newValueString << "*"
                    # use api call to retrieve variant sku using handle and vid
                    #replace vid with sku and save to csv

                    variant = ShopifyAPI::Variant.find(vid) 
                    sleep 1
                    # puts variant.sku
                    newValueString << variant.sku
                    if index < 2
                        newValueString << "|"
                    end
                end

                #end of value save the newvaluestring to new csv
                csv << [newValueString]

            end
        end
    end
end

Solution

  • Here's a simple way to get it done:

    begin
      variant = ShopifyAPI::Variant.find(vid)
    rescue
      next
    end
    

    If an exception is raised the stuff in rescue happens.