Я использую гем ShopifyApp, у которого есть действие под названием receive в своем WebhooksController. Как видно здесь: контроллер Webhooks

В своем контроллере WebhooksController я пытаюсь переопределить это действие receive, выполнив следующие действия:

class WebhooksController < ShopifyApp::WebhooksController
  def receive
    binding.pry
  end
end

Мой путь к моему WebhooksController следующий:

webhooks_receive POST   /webhooks/receive(.:format)  webhooks#receive

И маршрут, задаваемый движком Gem, таков:

webhooks POST /webhooks/:type(.:format)  shopify_app/webhooks#receive

Я вижу, что данные поступают, но по какой-то причине они не попадают в мое действие receive и не останавливаются на моем pry, и я не знаю почему.

Нашел и попробовал, но не повезло.

Я тоже пробовал это решение, но оно не сработало ..

Любые мысли?

Вот верхняя часть моих журналов, показывающих, что происходит:

Started POST "/webhooks/receive" for XX.XXX.37.116 at 2016-04-21 14:57:02 
+0000
Cannot render console from XX.XXX.37.116! Allowed networks: XXX.0.0.1, ::1, 
127.0.0.0/127.XXX.XXX.255

ActiveRecord::SchemaMigration Load (0.2ms)  SELECT "schema_migrations".* 
FROM "schema_migrations"

Processing by ShopifyApp::WebhooksController#receive as */*
Parameters: {"rate"=>{"origin"=>{"country"=>"US", "postal_code"=>"48615",   
"province"=>"MI", "city"=>"Breckenridge", "name"=>nil, "address1"=>"6760.. 
bunch of data removed for brevity}}}

Completed 500 Internal Server Error in 6ms (ActiveRecord: 0.0ms)

NoMethodError (undefined method `variable_size_secure_compare' for   
ActiveSupport::SecurityUtils:Module):
shopify_app (7.0.2) lib/shopify_app/webhook_verification.rb:20:in   
`hmac_valid?'

И мой файл маршрутов

Rails.application.routes.draw do
root :to => 'home#index'
mount ShopifyApp::Engine, at: '/'
resources :store
resources :shipping_methods

post '/webhooks/receive', to: 'webhooks#receive'
post '/billing_plans', to: 'billing_plans#save_plan', as: 'save_plan'
get '/activate_charge', to: 'billing_plans#activate_charge', as: 'activate'
post '/create_charge', to: 'billing_plans#create_charge', as: 
'create_billing_plan'
2
ToddT 21 Апр 2016 в 17:28

3 ответа

Лучший ответ

После двух дней устранения неполадок я понял, что их Gemspec включает старую версию рельсов, не содержащую метода, который они вызывали.

Я сообщил им об этом и улучшил свою версию с 4.2.5 до 4.2.6, и теперь она работает ... разочаровывает, но решена ... спасибо всем за вашу поддержку!

Если кто-то еще столкнется с этим, чтобы использовать контроллер веб-перехватчиков Shopify App gem, вам необходимо запустить Rails 4.2.6.

2
ToddT 23 Апр 2016 в 14:21

Попробуйте расположить маршруты в таком порядке:

post '/webhooks/receive', to: 'webhooks#receive'
mount ShopifyApp::Engine, at: '/'
0
dp7 21 Апр 2016 в 15:26

Маршруты Rails сопоставляются в том порядке, в котором они указаны, поэтому, если у вас есть ресурсы: фотографии над get 'photos / poll', маршрут действия show для строки ресурсов будет сопоставлен перед строкой get. Чтобы исправить это, переместите строку получения над строкой ресурсов, чтобы она соответствовала первой.

Итак, чтобы ваш собственный маршрут имел приоритет над маршрутом, определенным в геме ShopifyApp, вам необходимо определить его перед установкой механизма ShopifyApp.

Перемещение собственного маршрута post '/webhooks/receive', to: 'webhooks#receive' до mount ShopifyApp::Engine, at: '/' должно решить проблему.

Обратитесь к Rails Routing from the Outside In для получения дополнительной информации.

0
Dharam Gollapudi 21 Апр 2016 в 22:17