0

我在 Rails 应用程序中使用 Sidekiq 和 Airbrake。我希望 Airbrake 能够捕获 Sidekiq 作业期间发生的任何错误。根据我在网上找到的说明,我在 sidekiq.rb 中添加了以下内容:

config.error_handlers << Proc.new { |ex,context| Airbrake.notify_or_ignore(ex, parameters: context) }

然后,Airbrake 能够在我的开发环境中发生错误时捕获它们。但是,一旦我部署到更高的环境,Airbrake 就无法捕获 Sidekiq 错误。有什么理由会发生这种情况吗?在我的应用程序中我还需要配置什么吗?

我正在使用 sidekiq gem 版本 ~>3.0.2、airbrake gem 版本 ~>4.0.0 和 rails 3.2.18

这是我完整的sidekiq.rb:

require 'sidekiq'
require 'sidekiq-status'

redis_connection = "redis://127.0.0.1:6379/0"

Sidekiq.configure_server do |config|
  config.redis = { :url => redis_connection, :namespace => 'sidekiq' }
  config.server_middleware do |chain|
    chain.add Sidekiq::Status::ServerMiddleware, expiration: 30.minutes
  end
  config.client_middleware do |chain|
    chain.add Sidekiq::Status::ClientMiddleware
  end
  config.error_handlers << Proc.new { |ex,context| Airbrake.notify_or_ignore(ex, parameters: context) }
end

Sidekiq.configure_client do |config|
  config.redis = { :url => redis_connection, :namespace => 'sidekiq' }

  config.client_middleware do |chain|
    chain.add Sidekiq::Status::ClientMiddleware
  end
end

这是我完整的airbrake.rb:

Airbrake.configure do |config|
  config.user_attributes = [:id, :email]
  config.api_key = '*my_api_key*'
end
4

1 回答 1

1

事实证明,如果您的应用程序也使用橡胶,那么您还必须更改您的橡胶 sidekiq 初始化程序 (config/rubber/common/initializers/sidekiq) 以包含以下行:

config.error_handlers << Proc.new { |ex,context| Airbrake.notify_or_ignore(ex, parameters: context) }

橡胶 sidekiq 初始化器用于所有非开发环境,而 sidekiq.rb 文件用于开发环境。

于 2014-07-17T17:54:31.540 回答