Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Airbrake和Spree commerce API:未定义的方法“Airbrake请求数据”`_Ruby On Rails_Ruby_Ruby On Rails 3_Spree_Airbrake - Fatal编程技术网

Ruby on rails Airbrake和Spree commerce API:未定义的方法“Airbrake请求数据”`

Ruby on rails Airbrake和Spree commerce API:未定义的方法“Airbrake请求数据”`,ruby-on-rails,ruby,ruby-on-rails-3,spree,airbrake,Ruby On Rails,Ruby,Ruby On Rails 3,Spree,Airbrake,我使用Airbrake通知我Spree Commerce商店中的错误。现在我想使用spree的API,当我试图发布到http://localhost:3000/api/products要创建新产品: NoMethodError (undefined method `airbrake_request_data' for #<Spree::Api::V1::ProductsController:0x007f9fcdb81b58>): activesupport (3.2.9) lib

我使用Airbrake通知我Spree Commerce商店中的错误。现在我想使用spree的API,当我试图发布到
http://localhost:3000/api/products
要创建新产品:

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/ruby-1.9.3-p392@system/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.4ms)
  Rendered /usr/local/rvm/gems/ruby-1.9.3-p392@system/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (16.6ms)
  Rendered /usr/local/rvm/gems/ruby-1.9.3-p392@system/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (55.2ms)
initializers/airbrake.rb

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

所以,一个简单的设置。我正在使用Spree 1-2-stable,我不知道从哪里开始解决这个问题。

您遇到这个错误,因为Spree API扩展了ActionController::Metal而不是ActionController::Base

airbrake gem执行以下逻辑:

其中包括ActionController::Base中的方法

您可以选择以下几种方法来解决此问题:

  • 使用与airbrake gem中所示类似的方法,将这些方法加载到ActionController::Metal中
  • 使用类似的方法将方法加载到Spree::Api::BaseController中
  • 修饰Spree::Api::BaseController以直接包含这些方法

  • 这应该会让你走起来。

    你在Airbrake中发现Spree::Api之外的错误?是的,Spree::Api之外的一切都很好。只有在Api内部才会抛出该错误。也许我必须在Spree::Api中要求额外的airbrake,但我不知道在哪里/如何使用。我对Desive也有同样的体验。当用户登录失败时,我会收到此错误<代码>命名错误(未定义的方法“airbrake\u request\u data”用于#)原因相同。Deviate::FailureApp继承自ActionController::Metal,而不是ActionController::Base。上述解决方案也适用于您。
    Airbrake.configure do |config|
      config.api_key = 'XXXXXXXXXXXXXXXXXXX'
    end