Rails Shopify应用程序中的WebHooks和DELAYED_JOB [英] Webhooks and delayed_job in a Rails shopify app

查看:29
本文介绍了Rails Shopify应用程序中的WebHooks和DELAYED_JOB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我正在尝试向使用Shopify gem创建的Shopify应用程序添加网络挂钩。

到目前为止,一切都正常。在我的WEBHOOK_CONTROLLER中,我有一个连接到商店的BEFORE过滤: 过滤之前:连接到商店

    def product_new
      data = ActiveSupport::JSON.decode(request.body.read)
      shopify_id = data["id"]

      Product.new_from_shopify(@s, shopify_id)

      head :ok
    end

    private

    def connect_to_store

      shop_url = request.headers['HTTP_X_SHOPIFY_SHOP_DOMAIN']
      shop_url = ("http://" + shop_url)

      @s = Shop.find_by_url(shop_url)

      session = ShopifyAPI::Session.new(@s.url, @s.access_token)
      session.valid?
      ShopifyAPI::Base.activate_session(session)

    end

通过这种方式,我可以轻松访问产品型号中的Shopify API:

  def self.new_from_shopify(shop, shopify_id)

      shopify_p = ShopifyAPI::Product.find(shopify_id)

      # creates the local product
      local_p = Product.new
      local_p.shopify_id = shopify_p.id
      local_p.name = shopify_p.title
      local_p.shop = shop
      local_p.save

  end

到目前为止一切顺利。

问题是当我尝试将DELAYED_JOB添加到混合中时。 如果我尝试更改

Product.new_from_shopify(@s, shopify_id)

Product.delay.new_from_shopify(@s, shopify_id)

那么延迟的作业将无法再访问Shopify API连接,并给我一个错误。

这种情况下的最佳实践是什么?

更新

一种可能的解决方案是在My Shop模型中创建一个新方法:

    def connect_to_store
      session = ShopifyAPI::Session.new(self.url, self.access_token)
      session.valid?
      ShopifyAPI::Base.activate_session(session)
    end

然后在"我的产品模型"操作中调用此方法。

推荐答案

我在此建议的方法也适用于作业工人:https://stackoverflow.com/a/11445727/1440757

这篇关于Rails Shopify应用程序中的WebHooks和DELAYED_JOB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆