在Rails shopify应用程序中的Webhooks和delayed_job
嗨,我正在尝试将webhooks添加到使用shopify gem创建的shopify应用程序中。
到现在为止一切正常。 在我的webhook_controller中,我有一个连接到商店的beforefilter:before_filter:connect_to_store
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
通过这种方式,我可以轻松访问Product模型中的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连接并给我一个错误。
在这种情况下,最佳做法是什么?
UPDATE
一种可能的解决方案是在我的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
由于这是一个将在控制器范围之外执行的作业,因此它必须知道如何在没有此方法的情况下连接到shopify API。
最佳解决方案是将设置Shopify api连接的代码提取到控制器和延迟作业都可访问的单独模块。
- Rails – link_to,路由和嵌套资源
- 使用jsonb数组的Rails(postgres)查询
- LoadError:无法在Windows 2008 x64服务器上加载此类文件–bcrypt_ext
- Capybara :: ElementNotFound:无法找到文件字段“file”
- Rails accepted_nested_attributes_for始终创建嵌套模型,但不更新它们
- 如何将erb转换为html?
- Nginx工作进程无法访问config.ru
- Windows 7上的Ruby on Rails RMagick
- `add_frozen_gem_path’:Gem的未定义方法`source_index’:模块(NoMethodError)或不推荐使用Gem.source_index