sentry-raven 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sentry-raven might be problematic. Click here for more details.
- data/README.md +45 -70
- data/lib/raven.rb +8 -4
- data/lib/raven/client.rb +1 -1
- data/lib/raven/configuration.rb +6 -3
- data/lib/raven/event.rb +0 -9
- data/lib/raven/rack.rb +18 -4
- data/lib/raven/rails/controller_methods.rb +13 -0
- data/lib/raven/rails/middleware/debug_exceptions_catcher.rb +1 -2
- data/lib/raven/railtie.rb +8 -0
- data/lib/raven/transports/http.rb +2 -1
- data/lib/raven/version.rb +1 -1
- metadata +55 -10
data/README.md
CHANGED
@@ -1,92 +1,54 @@
|
|
1
1
|
# Raven-Ruby
|
2
2
|
|
3
|
-
[![Build Status](https://secure.travis-ci.org/getsentry/raven-ruby.png?branch=master)](http://travis-ci.org/getsentry/raven-ruby)
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/sentry-raven.png)](http://badge.fury.io/rb/sentry-raven) [![Build Status](https://secure.travis-ci.org/getsentry/raven-ruby.png?branch=master)](http://travis-ci.org/getsentry/raven-ruby) [![Coverage Status](https://coveralls.io/repos/getsentry/raven-ruby/badge.png?branch=master)](https://coveralls.io/r/getsentry/raven-ruby)
|
4
4
|
|
5
5
|
A client and integration layer for the [Sentry](https://github.com/getsentry/sentry) error reporting API.
|
6
6
|
|
7
|
-
|
7
|
+
## Requirements
|
8
8
|
|
9
|
-
|
9
|
+
We test on Ruby MRI 1.8.7, 1.9.2, 1.9.3 and 2.0.0. Other versions/VMs are untested but we will accept pull requests to support them.
|
10
10
|
|
11
|
-
|
11
|
+
## Installation
|
12
12
|
|
13
13
|
```ruby
|
14
|
-
gem "sentry-raven"
|
15
|
-
```
|
16
|
-
|
17
|
-
Or install manually
|
18
|
-
```bash
|
19
|
-
$ gem install sentry-raven
|
14
|
+
gem "sentry-raven" #, :github => "getsentry/raven-ruby"
|
20
15
|
```
|
21
16
|
|
22
17
|
## Usage
|
23
18
|
|
19
|
+
You'll want to set your ```SENTRY_DSN``` environment variable to the URL on your project's API Keys setting page (e.g. ```https://secret:public@app.getsentry.com/9999```). For more information, see [Configuration](#configuration).
|
20
|
+
|
24
21
|
### Rails 3
|
25
22
|
|
26
|
-
|
23
|
+
In Rails 3, Sentry will "just work," capturing any exceptions thrown in your app. All Rails integrations also
|
24
|
+
have mixed-in methods for capturing exceptions you've rescued yourself inside of controllers:
|
27
25
|
|
28
26
|
```ruby
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
27
|
+
# ...
|
28
|
+
rescue => exception
|
29
|
+
capture_exception(exception) # or capture_message('Flux overload')
|
30
|
+
flash[:error] = 'Your flux capacitor is overloaded!'
|
31
|
+
end
|
34
32
|
```
|
35
33
|
|
36
34
|
### Rails 2
|
37
35
|
|
38
|
-
No support for Rails 2 yet.
|
36
|
+
No support for Rails 2 yet, but it is being worked on.
|
39
37
|
|
40
38
|
### Rack
|
41
39
|
|
42
|
-
|
43
|
-
|
44
|
-
```ruby
|
45
|
-
require 'raven'
|
46
|
-
|
47
|
-
Raven.configure do |config|
|
48
|
-
config.dsn = 'http://public:secret@example.com/project-id'
|
49
|
-
end
|
50
|
-
|
51
|
-
use Raven::Rack
|
52
|
-
```
|
40
|
+
Add ```use Raven::Rack``` to your ```config.ru``` (or other rackup file).
|
53
41
|
|
54
42
|
### Sinatra
|
55
43
|
|
56
|
-
```
|
57
|
-
require 'sinatra'
|
58
|
-
require 'raven'
|
59
|
-
|
60
|
-
Raven.configure do |config|
|
61
|
-
config.dsn = 'http://public:secret@example.com/project-id'
|
62
|
-
end
|
63
|
-
|
64
|
-
use Raven::Rack
|
65
|
-
|
66
|
-
get '/' do
|
67
|
-
1 / 0
|
68
|
-
end
|
69
|
-
```
|
70
|
-
|
71
|
-
### Other Ruby
|
72
|
-
|
73
|
-
```ruby
|
74
|
-
require 'raven'
|
75
|
-
|
76
|
-
Raven.configure do |config|
|
77
|
-
config.dsn = 'http://public:secret@example.com/project-id'
|
78
|
-
|
79
|
-
# manually configure environment if ENV['RACK_ENV'] is not defined
|
80
|
-
config.current_environment = 'production'
|
81
|
-
end
|
82
|
-
```
|
44
|
+
Like any other Rack middleware, add ```use Raven::Rack``` to your Sinatra app.
|
83
45
|
|
84
46
|
## Capturing Events
|
85
47
|
|
86
48
|
Many implementations will automatically capture uncaught exceptions (such as Rails, Sidekiq or by using
|
87
49
|
the Rack middleware). Sometimes you may want to catch those exceptions, but still report on them.
|
88
50
|
|
89
|
-
Several
|
51
|
+
Several helpers are available to assist with this.
|
90
52
|
|
91
53
|
### Capture Exceptions in a Block
|
92
54
|
|
@@ -128,7 +90,7 @@ The following attributes are available:
|
|
128
90
|
* `logger`: the logger name to record this event under
|
129
91
|
* `level`: a string representing the level of this event (fatal, error, warning, info, debug)
|
130
92
|
* `server_name`: the hostname of the server
|
131
|
-
* `tags`: a mapping of tags describing this event
|
93
|
+
* `tags`: a mapping of [tags](https://www.getsentry.com/docs/tags/) describing this event
|
132
94
|
* `extra`: a mapping of arbitrary context
|
133
95
|
|
134
96
|
## Testing
|
@@ -138,32 +100,48 @@ $ bundle install
|
|
138
100
|
$ rake spec
|
139
101
|
```
|
140
102
|
|
141
|
-
##
|
103
|
+
## Configuration
|
142
104
|
|
143
|
-
|
105
|
+
### SENTRY_DSN
|
144
106
|
|
145
|
-
|
107
|
+
After you complete setting up a project, you'll be given a value which we call a DSN, or Data Source Name. It looks a lot like a standard URL, but it's actually just a representation of the configuration required by Raven (the Sentry client). It consists of a few pieces, including the protocol, public and secret keys, the server address, and the project identifier.
|
146
108
|
|
147
|
-
```
|
148
|
-
require 'raven'
|
109
|
+
With Raven, you may either set the ```SENTRY_DSN``` environment variable (recommended), or set your DSN manually in a config block:
|
149
110
|
|
111
|
+
```ruby
|
150
112
|
Raven.configure do |config|
|
151
113
|
config.dsn = 'http://public:secret@example.com/project-id'
|
152
|
-
config.environments = %w[ development production ]
|
153
114
|
end
|
154
115
|
```
|
155
116
|
|
156
|
-
|
117
|
+
### Environments
|
118
|
+
|
119
|
+
By default events will be sent to Sentry in all environments except 'test', 'development', and 'cucumber'.
|
120
|
+
|
121
|
+
You can configure Raven to run only in certain environments by configuring the `environments` whitelist. For example, to only run Sentry in production:
|
122
|
+
|
123
|
+
```ruby
|
124
|
+
Raven.configure do |config|
|
125
|
+
config.environments = %w[ production ]
|
126
|
+
end
|
127
|
+
```
|
128
|
+
|
129
|
+
Sentry automatically sets the current environment to ```RAILS_ENV```, or if it is not present, ```RACK_ENV```. If you are using Sentry outside of Rack or Rails, you'll need to set the current environment yourself:
|
130
|
+
|
131
|
+
```ruby
|
132
|
+
Raven.configure do |config|
|
133
|
+
config.current_environment = 'my_cool_environment'
|
134
|
+
end
|
135
|
+
```
|
136
|
+
|
137
|
+
### Excluding Exceptions
|
157
138
|
|
158
139
|
If you never wish to be notified of certain exceptions, specify 'excluded_exceptions' in your config file.
|
159
140
|
|
160
141
|
In the example below, the exceptions Rails uses to generate 404 responses will be suppressed.
|
161
142
|
|
162
143
|
```ruby
|
163
|
-
require 'raven'
|
164
|
-
|
165
144
|
Raven.configure do |config|
|
166
|
-
config.dsn = 'http://public:secret@example.com/project-id'
|
167
145
|
config.excluded_exceptions = ['ActionController::RoutingError', 'ActiveRecord::RecordNotFound']
|
168
146
|
end
|
169
147
|
```
|
@@ -177,10 +155,7 @@ sanitize keys that match various patterns (e.g. password) and values that resemb
|
|
177
155
|
To specify your own (or to remove the defaults), simply pass them with your configuration:
|
178
156
|
|
179
157
|
```ruby
|
180
|
-
require 'raven'
|
181
|
-
|
182
158
|
Raven.configure do |config|
|
183
|
-
config.dsn = 'http://public:secret@example.com/project-id'
|
184
159
|
config.processors = [Raven::Processor::SanitizeData]
|
185
160
|
end
|
186
161
|
```
|
data/lib/raven.rb
CHANGED
@@ -104,13 +104,17 @@ module Raven
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def capture_exception(exception, options={})
|
107
|
-
evt = Event.capture_exception(exception, options)
|
108
|
-
|
107
|
+
if evt = Event.capture_exception(exception, options)
|
108
|
+
yield evt if block_given?
|
109
|
+
send(evt)
|
110
|
+
end
|
109
111
|
end
|
110
112
|
|
111
113
|
def capture_message(message, options={})
|
112
|
-
evt = Event.capture_message(message, options)
|
113
|
-
|
114
|
+
if evt = Event.capture_message(message, options)
|
115
|
+
yield evt if block_given?
|
116
|
+
send(evt)
|
117
|
+
end
|
114
118
|
end
|
115
119
|
|
116
120
|
# Bind user context. Merges with existing context (if any).
|
data/lib/raven/client.rb
CHANGED
@@ -33,7 +33,7 @@ module Raven
|
|
33
33
|
transport.send(generate_auth_header(encoded_data), encoded_data,
|
34
34
|
:content_type => content_type)
|
35
35
|
rescue
|
36
|
-
logger.error "Unable to record event with remote Sentry server"
|
36
|
+
Raven.logger.error "Unable to record event with remote Sentry server"
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
data/lib/raven/configuration.rb
CHANGED
@@ -70,8 +70,7 @@ module Raven
|
|
70
70
|
def initialize
|
71
71
|
self.server = ENV['SENTRY_DSN'] if ENV['SENTRY_DSN']
|
72
72
|
@context_lines = 3
|
73
|
-
self.
|
74
|
-
self.current_environment = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
|
73
|
+
self.current_environment = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'default'
|
75
74
|
self.send_modules = true
|
76
75
|
self.excluded_exceptions = IGNORE_DEFAULT
|
77
76
|
self.processors = [Raven::Processor::SanitizeData]
|
@@ -122,7 +121,11 @@ module Raven
|
|
122
121
|
end
|
123
122
|
|
124
123
|
def send_in_current_environment?
|
125
|
-
environments
|
124
|
+
if environments
|
125
|
+
environments.include?(current_environment)
|
126
|
+
else
|
127
|
+
!%w[test cucumber development].include?(current_environment)
|
128
|
+
end
|
126
129
|
end
|
127
130
|
|
128
131
|
end
|
data/lib/raven/event.rb
CHANGED
@@ -150,15 +150,6 @@ module Raven
|
|
150
150
|
end
|
151
151
|
end
|
152
152
|
|
153
|
-
def self.capture_rack_exception(exc, rack_env, options={}, &block)
|
154
|
-
capture_exception(exc, options) do |evt|
|
155
|
-
evt.interface :http do |int|
|
156
|
-
int.from_rack(rack_env)
|
157
|
-
end
|
158
|
-
block.call(evt) if block
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
153
|
def self.capture_message(message, options={})
|
163
154
|
new(options) do |evt|
|
164
155
|
evt.message = message
|
data/lib/raven/rack.rb
CHANGED
@@ -18,6 +18,22 @@ module Raven
|
|
18
18
|
#
|
19
19
|
# Use a standard Raven.configure call to configure your server credentials.
|
20
20
|
class Rack
|
21
|
+
def self.capture_exception(exception, env, options = {})
|
22
|
+
Raven.capture_exception(exception, options) do |evt|
|
23
|
+
evt.interface :http do |int|
|
24
|
+
int.from_rack(env)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.capture_message(message, env, options = {})
|
30
|
+
Raven.capture_message(message, options) do |evt|
|
31
|
+
evt.interface :http do |int|
|
32
|
+
int.from_rack(env)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
21
37
|
def initialize(app)
|
22
38
|
@app = app
|
23
39
|
end
|
@@ -28,8 +44,7 @@ module Raven
|
|
28
44
|
rescue Error => e
|
29
45
|
raise # Don't capture Raven errors
|
30
46
|
rescue Exception => e
|
31
|
-
|
32
|
-
Raven.send(evt)
|
47
|
+
Raven::Rack.capture_exception(e, env)
|
33
48
|
raise
|
34
49
|
ensure
|
35
50
|
Context.clear!
|
@@ -38,8 +53,7 @@ module Raven
|
|
38
53
|
error = env['rack.exception'] || env['sinatra.error']
|
39
54
|
|
40
55
|
if error
|
41
|
-
|
42
|
-
Raven.send(evt) if evt
|
56
|
+
Raven::Rack.capture_exception(error, env)
|
43
57
|
end
|
44
58
|
|
45
59
|
response
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Raven
|
2
|
+
module Rails
|
3
|
+
module ControllerMethods
|
4
|
+
def capture_message(message, options = {})
|
5
|
+
Raven::Rack.capture_message(message, request.env, options)
|
6
|
+
end
|
7
|
+
|
8
|
+
def capture_exception(exception, options = {})
|
9
|
+
Raven::Rack.capture_exception(exception, request.env, options)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -7,8 +7,7 @@ module Raven
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def render_exception_with_raven(env, exception)
|
10
|
-
|
11
|
-
Raven.send(evt) if evt
|
10
|
+
Raven::Rack.capture_exception(exception, env)
|
12
11
|
render_exception_without_raven(env, exception)
|
13
12
|
end
|
14
13
|
end
|
data/lib/raven/railtie.rb
CHANGED
@@ -7,6 +7,13 @@ module Raven
|
|
7
7
|
app.config.middleware.insert 0, "Raven::Rack"
|
8
8
|
end
|
9
9
|
|
10
|
+
initializer 'raven.action_controller' do
|
11
|
+
ActiveSupport.on_load :action_controller do
|
12
|
+
require 'raven/rails/controller_methods'
|
13
|
+
include Raven::Rails::ControllerMethods
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
10
17
|
config.after_initialize do
|
11
18
|
Raven.configure(true) do |config|
|
12
19
|
config.logger ||= ::Rails.logger
|
@@ -23,3 +30,4 @@ module Raven
|
|
23
30
|
end
|
24
31
|
end
|
25
32
|
end
|
33
|
+
|
@@ -10,7 +10,8 @@ module Raven
|
|
10
10
|
class HTTP < Transport
|
11
11
|
|
12
12
|
def send(auth_header, data, options = {})
|
13
|
-
|
13
|
+
project_id = self.configuration[:project_id]
|
14
|
+
response = conn.post "/api/#{project_id}/store/" do |req|
|
14
15
|
req.headers['Content-Type'] = options[:content_type]
|
15
16
|
req.headers['X-Sentry-Auth'] = auth_header
|
16
17
|
req.body = data
|
data/lib/raven/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sentry-raven
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-04-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: faraday
|
17
|
-
requirement: &
|
17
|
+
requirement: &70157840148660 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 0.7.6
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70157840148660
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: uuidtools
|
28
|
-
requirement: &
|
28
|
+
requirement: &70157840148260 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70157840148260
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: multi_json
|
39
|
-
requirement: &
|
39
|
+
requirement: &70157840147720 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '1.0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70157840147720
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: hashie
|
50
|
-
requirement: &
|
50
|
+
requirement: &70157840147300 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,7 +55,51 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70157840147300
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rake
|
61
|
+
requirement: &70157840163200 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *70157840163200
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: &70157840162700 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.10'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *70157840162700
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: simplecov
|
83
|
+
requirement: &70157840162260 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *70157840162260
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: coveralls
|
94
|
+
requirement: &70157840161800 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *70157840161800
|
59
103
|
description:
|
60
104
|
email: noah@coderanger.net
|
61
105
|
executables:
|
@@ -81,6 +125,7 @@ files:
|
|
81
125
|
- lib/raven/processor.rb
|
82
126
|
- lib/raven/processors/sanitizedata.rb
|
83
127
|
- lib/raven/rack.rb
|
128
|
+
- lib/raven/rails/controller_methods.rb
|
84
129
|
- lib/raven/rails/middleware/debug_exceptions_catcher.rb
|
85
130
|
- lib/raven/railtie.rb
|
86
131
|
- lib/raven/sidekiq.rb
|