2016-11-12 5 views
0

編集、より複雑なジョブを実行するために使用:それは実際には本当に簡単だった、私は、セットアップSidekiqとRedisのHerokuの上、私はそれが非常にシンプルで動作するように取得することができるよきsitetokenSidekiqが

に合格するのを忘れこのようなジョブ:

order_worker.rb

class OrderWorker 
    include Sidekiq::Worker 
    sidekiq_options retry: false 

    def perform(num_orders) 
     x=3*5 
    end 
end 

しかし、もっと複雑なジョブはSidekiqのWeb UIに応じて失敗し続けます。どういうわけかShopifyAPIとFakerを含める必要がありますか?私は何が実行されているかについては明確ではない。アプリ全体は、宝石とすべてが労働者のdynoで作成されていますか?

order_worker.rb

class OrderWorker 
    include Sidekiq::Worker 
    sidekiq_options retry: false 

    def perform(num_orders) 
     include ShopifyAPI 
     include Faker 

     # Initialize session 
     session = ShopifyAPI::Session.new(site, token) 
     ShopifyAPI::Base.activate_session(session) 

     #Create orders 
     num_orders.times do 
      new_order = ShopifyAPI::Order.new(
       :line_items => [ 
       ShopifyAPI::LineItem.new(
        :quantity => 1, 
        :variant_id => 25701798472 
       ) 
       ] 
      ) 
      new_order.billing_address = ShopifyAPI::BillingAddress.new(:name => Faker::Name.name, :zip => zips[rnd], :country => 'United States', :province => states[rnd], :address1 => Faker::Address.street_address, :city => Faker::Address.city) 
      new_order.email = r.rand(36**2).to_s(36) + '@yahoo.com' 
      new_order.created_at = Faker::Time.backward(390, :evening) 
      new_order.total_price = Faker::Number.decimal(3, 2) 
      new_order.save 
      @errs = @errs + new_order.errors.full_messages 
      sleep 0.03 
     end 

    end 


end 
+2

おそらくperformメソッドに 'include'行があるでしょう、私はあなたのログインをすべてクラスにカプセル化してから、あなたのクラスをperformメソッドで実行することをお勧めします –

答えて

0

OrderWorker#performはそれがないクラスOrderWorker自体に、OrderWorkerのインスタンスのスコープ内で実行手段インスタンスメソッド、であることに注意してください。インスタンスにメソッドincludeがありません。それはクラスに属します。その結果、タスクの実行時にNoMethodError秒が得られます。

P.S.あなたはinclude何も持っていないようです。それらを削除するincludeの内部performあなたの労働者の作業を行います。