2013-06-02 38 views
3

我使用Airbrake通知我關於我的Spree Commerce商店中的錯誤。現在,我想用大禮包的API,我收到以下錯誤,當我嘗試發佈到http://localhost:3000/api/products創建一個新的產品:Airbrake和Spree商業API:未定義的方法`airbrake_request_data`

NoMethodError (undefined method `airbrake_request_data' for #<Spree::Api::V1::ProductsController:0x007f9fcdb81b58>): 
    activesupport (3.2.9) lib/active_support/core_ext/object/try.rb:36:in `try' 
    airbrake (3.1.11) lib/airbrake/rails/middleware.rb:46:in `request_data' 
    airbrake (3.1.11) lib/airbrake/rails/middleware.rb:39:in `notify_airbrake' 
    airbrake (3.1.11) lib/airbrake/rails/middleware.rb:15:in `rescue in call' 
    airbrake (3.1.11) lib/airbrake/rails/middleware.rb:12:in `call' 
    actionpack (3.2.9) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call' 
    actionpack (3.2.9) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' 
    railties (3.2.9) lib/rails/rack/logger.rb:32:in `call_app' 
    railties (3.2.9) lib/rails/rack/logger.rb:16:in `block in call' 
    activesupport (3.2.9) lib/active_support/tagged_logging.rb:22:in `tagged' 
    railties (3.2.9) lib/rails/rack/logger.rb:16:in `call' 
    actionpack (3.2.9) lib/action_dispatch/middleware/request_id.rb:22:in `call' 
    rack (1.4.5) lib/rack/methodoverride.rb:21:in `call' 
    rack (1.4.5) lib/rack/runtime.rb:17:in `call' 
    activesupport (3.2.9) lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
    rack (1.4.5) lib/rack/lock.rb:15:in `call' 
    actionpack (3.2.9) lib/action_dispatch/middleware/static.rb:62:in `call' 
    airbrake (3.1.11) lib/airbrake/user_informer.rb:16:in `_call' 
    airbrake (3.1.11) lib/airbrake/user_informer.rb:12:in `call' 
    railties (3.2.9) lib/rails/engine.rb:479:in `call' 
    railties (3.2.9) lib/rails/application.rb:223:in `call' 
    rack (1.4.5) lib/rack/content_length.rb:14:in `call' 
    railties (3.2.9) lib/rails/rack/log_tailer.rb:17:in `call' 
    rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service' 
    /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service' 
    /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run' 
    /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread' 


    Rendered /usr/local/rvm/gems/[email protected]/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.4ms) 
    Rendered /usr/local/rvm/gems/[email protected]/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (16.6ms) 
    Rendered /usr/local/rvm/gems/[email protected]/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (55.2ms) 

顯然,在我的電話的錯誤。但我想知道哪個錯誤。當然,Airbrake也應該通知API的錯誤。我施普雷配置減速板這樣:

Gemfile

gem "airbrake" 

initializers/airbrake.rb

Airbrake.configure do |config| 
    config.api_key = 'XXXXXXXXXXXXXXXXXXX' 
end 

所以,簡單的設置。我使用Spree 1-2穩定版,我不知道從哪裏開始解決這個問題。

+0

您在Airbrake中獲得Spree :: Api以外的內容時發生錯誤? – mathieugagne

+0

是的,在Spree :: Api之外,一切正常。只在Api內部引發錯誤。也許我需要在Spree :: Api內額外添加airbrake,但我不知道在哪裏/如何。 – 23tux

回答

4

您遇到此錯誤是因爲Spree API擴展了ActionController :: Metal而不是ActionController :: Base。

的空氣制動寶石執行這裏示出的一些邏輯: https://github.com/airbrake/airbrake/blob/68543097a8731cf1f3e717946bd5ed33e5edccad/lib/airbrake/rails.rb#L13

,其包括在給ActionController的::基地方法。

您對如何解決這幾個選項:

  1. 負載的方法中的ActionController ::金屬以及使用空氣制動寶石
  2. 負載的方法證明,類似的方法中狂歡::阿比:: BaseController使用類似的方法
  3. 裝飾大禮包::阿比:: BaseController包括這應該讓你去的方法直接

+2

我正在體驗Devise同樣的事情。當用戶登錄失敗時,出現此錯誤。 'NoMethodError(未定義的方法'airbrake_request_data'爲#)' – wndxlori

+1

這是同樣的原因。 Devise :: FailureApp繼承自ActionController :: Metal而不是ActionController :: Base。上述解決方案也適用於您。 – gmacdougall