2016-04-21 99 views
2

我正在使用ShopifyApp宝石,它的WebhooksController中有一个叫做receive的动作。正如在这里看到:Webhooks controller从宝石继承控制器类

在我WebhooksController控制器我想这样做来覆盖receive行动如下:

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

我对我的WebhooksController路线是这样的:

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

而由宝石引擎输入的路线是:

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

我看到数据进来,但由于某种原因,它没有打我的receive行动,停在我的pry,我不知道为什么。

Found this and tried it, but no luck.

I tried this solution too and it didn't work..

有什么想法?

这里是我的日志显示发生的事情上:

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' 
+0

**我看到数据进来** - 请解释你在哪里看到这个?**但由于某种原因,它没有打我的接收方法,停在我的撬,我不知道为什么** - 它是否停在'binding.pry'? – dp7

+0

我在控制台中看到它,并没有它没有击中'binding.pry'不知道为什么..我试过这个,但它没有工作.. [覆盖类中的Gem](http:// stackoverflow .com/questions/2688853/how-to-override-a-class-method-of-the-gem-in-rails-application) – ToddT

+0

你可以添加日志吗? – dp7

回答

2

后故障排除的两天,我实现了自己的Gemspec是包括旧版本不包含他们调用方法轨..

我让他们知道撞到我的版本4.2.5从4.2。 6现在它的工作..令人沮丧但解决..谢谢大家的支持!

如果有其他人遇到此问题,为了使用Shopify App gem Webhooks控制器,您需要运行Rails 4.2.6。

0

尝试把路线顺序:

post '/webhooks/receive', to: 'webhooks#receive' 
mount ShopifyApp::Engine, at: '/' 
0

的Rails路线按照它们指定的顺序进行匹配,所以如果你使用 有一个资源:上面的照片获取'照片/民意调查'显示行动的 路线的资源行将匹配之前得到线。到 解决这个问题,将获取线移动到资源行上方,以便首先匹配 。

因此,为了使自己的路线优先于在ShopifyApp宝石定义的,你需要安装ShopifyApp引擎之前定义它。

移动你自己的路线post '/webhooks/receive', to: 'webhooks#receive'之前mount ShopifyApp::Engine, at: '/'应该解决这个问题。

有关更多信息,请参阅Rails Routing from the Outside In