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

Rails : Shopify app orders create webhook job not performing

我想在 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', format: 'json'},
    {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)

工作正常。