Rails Shopify应用程序中的WebHooks和DELAYED_JOB [英] Webhooks and delayed_job in a Rails shopify app
本文介绍了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屋!
查看全文