微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rails:Shopify 应用订单创建的 webhook 作业不执行

如何解决Rails:Shopify 应用订单创建的 webhook 作业不执行

我想在 Shopify 中创建订单时记录订单数据,我的 shopify rails 应用程序在 webhook 控制器中接收 web 挂钩数据,但未执行作业。我遵循了 shopify_app gem (8.2.6) 的文档,但它不起作用。

目前我正在使用 ngrok 隧道开发开发环境。 此问题与开发和生产环境有关。

活动版本:2020-04

这是配置

config.webhooks = [
    {topic: 'customers/create',address: Rails.configuration.business_script_endpoint+'/custom/webhooks/customers_create',format: 'json'},{topic: 'checkouts/create',address: Rails.configuration.business_script_endpoint+'/custom/webhooks/checkouts_create',{topic: 'orders/create',address: Rails.configuration.business_script_endpoint+'/custom/webhooks/orders_create',format: 'json'}
] 

这是网络钩子控制器的代码

module ShopifyApp
  class WebhooksController < ActionController::Base
    include ShopifyApp::WebhookVerification

    class ShopifyApp::MissingWebhookJobError < StandardError; end

    def receive
      puts 'Here in webhook receive'
      params.permit!
      job_args = {shop_domain: shop_domain,webhook: webhook_params.to_h}
      webhook_job_klass.perform_later(job_args)
      head :no_content
    end

    private

    def webhook_params
      params.except(:controller,:action,:type)
    end

    def webhook_job_klass
      webhook_job_klass_name.safe_constantize or raise ShopifyApp::MissingWebhookJobError
    end

    def webhook_job_klass_name(type = webhook_type)
      puts [webhook_namespace,"#{type}_job"].compact.join('/') 
      [webhook_namespace,"#{type}_job"].compact.join('/').classify
    end

    def webhook_type
      params[:type]
    end

    def webhook_namespace
      ShopifyApp.configuration.webhook_jobs_namespace
    end
  end
end

我可以看到 puts 消息在 webhook 中接收

这是订单创建作业代码

class OrdersCreateJob < ActiveJob::Base
  def perform(shop_domain:,webhook:)
    shop = Shop.find_by(shopify_domain: shop_domain)

    puts 'Order create job started'
  end
end

我无法收到 puts 消息Order create job started,因为它没有执行作业。

在这种情况下,结帐创建网络挂钩工作正常。其他两个订单和客户创建的没有执行。 我需要做什么?

解决方法

得到了这个问题的解决方案。 当我更改网络钩子控制器接收功能时

webhook_job_klass.perform_later(job_args)

webhook_job_klass.perform_now(job_args)

一切正常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。