airbrake 3.1.12 → 3.1.13
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +61 -0
- data/README.md +36 -17
- data/Rakefile +14 -8
- data/TESTED_AGAINST +1 -0
- data/airbrake.gemspec +3 -3
- data/features/metal.feature +1 -1
- data/features/rails.feature +1 -0
- data/features/rake.feature +4 -0
- data/features/sinatra.feature +72 -1
- data/features/support/rake/Rakefile +14 -4
- data/generators/airbrake/airbrake_generator.rb +5 -5
- data/lib/airbrake.rb +2 -9
- data/lib/airbrake/backtrace.rb +8 -13
- data/lib/airbrake/capistrano.rb +58 -2
- data/lib/airbrake/cli/runner.rb +1 -0
- data/lib/airbrake/configuration.rb +31 -11
- data/lib/airbrake/notice.rb +52 -61
- data/lib/airbrake/rails/controller_methods.rb +7 -3
- data/lib/airbrake/rails/javascript_notifier.rb +56 -31
- data/lib/airbrake/rake_handler.rb +3 -2
- data/lib/airbrake/response.rb +6 -8
- data/lib/airbrake/sender.rb +1 -1
- data/lib/airbrake/sinatra.rb +9 -2
- data/lib/airbrake/user_informer.rb +1 -1
- data/lib/airbrake/version.rb +1 -1
- data/lib/airbrake_tasks.rb +2 -2
- data/lib/rails/generators/airbrake/airbrake_generator.rb +5 -5
- data/lib/templates/javascript_notifier_configuration +12 -0
- data/lib/templates/javascript_notifier_loader +6 -0
- data/resources/notice.xml +2 -1
- data/test/airbrake_tasks_test.rb +2 -2
- data/test/backtrace_test.rb +19 -0
- data/test/capistrano_test.rb +9 -1
- data/test/configuration_test.rb +49 -2
- data/test/controller_methods_test.rb +22 -0
- data/test/helper.rb +29 -155
- data/test/integration.rb +15 -0
- data/test/{catcher_test.rb → integration/catcher_test.rb} +130 -19
- data/test/{javascript_notifier_test.rb → integration/javascript_notifier_test.rb} +0 -1
- data/test/logger_test.rb +11 -11
- data/test/notice_test.rb +8 -2
- data/test/notifier_test.rb +6 -6
- data/test/sender_test.rb +1 -1
- metadata +34 -31
- data/lib/templates/javascript_notifier +0 -20
data/CHANGELOG
CHANGED
@@ -1,3 +1,63 @@
|
|
1
|
+
Version 3.1.13 - 2013-08-20 09:39:41 +0200
|
2
|
+
===============================================================================
|
3
|
+
|
4
|
+
Anton Minin (1):
|
5
|
+
Fix notice crash on empty cgi_data
|
6
|
+
|
7
|
+
Cedric Brancourt (2):
|
8
|
+
fixes #231 When no session in controller , airbrake_session_data returns {:session => "no session found"}
|
9
|
+
fixes airbrake/airbrake#233 duplicate cgi_data in Notice params
|
10
|
+
|
11
|
+
Chris Gunther (2):
|
12
|
+
Coerce user attributes to strings before checking that they are valid.
|
13
|
+
Reject invalid user attributes on assignment
|
14
|
+
|
15
|
+
Hongli Lai (Phusion) (1):
|
16
|
+
Add support for SSL in the command line tool.
|
17
|
+
|
18
|
+
Hrvoje Šimić (22):
|
19
|
+
better explanation of ignored environments and classes
|
20
|
+
add test for warnings about user attributes
|
21
|
+
remove unnecessary active record requirements
|
22
|
+
remove platform checks from nil logger initialization
|
23
|
+
update bourne dependency to fix test-running issues with ruby 2.0.0
|
24
|
+
test against ruby 2.0.0 on a CI server
|
25
|
+
remove mocha deprecation warnings
|
26
|
+
be more careful when reading sinatra environment name
|
27
|
+
wrap the js configuration in try-catch
|
28
|
+
ignore Gemfile.lock
|
29
|
+
lock json-schema to 1.0.12
|
30
|
+
add a scenario for ignoring rake exceptions [#223]
|
31
|
+
get rid of activesupport once and for all
|
32
|
+
fully support Rails 4.0
|
33
|
+
stop using appraisals for unit tests
|
34
|
+
fix formatting of airbrake_session_data
|
35
|
+
fix test for no session controller [#232]
|
36
|
+
include actionpack and activesupport in gemspec for tests
|
37
|
+
cleaning up tests
|
38
|
+
cleaning the codebase from warnings issued in ruby verbose mode
|
39
|
+
remove private writers and use instance variables to remove warnings
|
40
|
+
fixing changeling's version sorting
|
41
|
+
|
42
|
+
Jason Petersen (1):
|
43
|
+
Escape user name in Airbrake notify command
|
44
|
+
|
45
|
+
Konstantin Zub (1):
|
46
|
+
return environment_info unless environment_name
|
47
|
+
|
48
|
+
Kris Kemper (1):
|
49
|
+
Allow backtrace to be a String
|
50
|
+
|
51
|
+
Nathan Broadbent (1):
|
52
|
+
Use a separate (blank) array of ignored exceptions for Rake tasks
|
53
|
+
|
54
|
+
Subhash Chandra (1):
|
55
|
+
split javascript notifier into loader and configuration
|
56
|
+
|
57
|
+
Tony Spore (1):
|
58
|
+
use 'bundle exec' in capistrano task
|
59
|
+
|
60
|
+
|
1
61
|
Version 3.1.12 - 2013-04-29 18:48:40 +0200
|
2
62
|
===============================================================================
|
3
63
|
|
@@ -1165,3 +1225,4 @@ Nick Quaranto (3):
|
|
1165
1225
|
|
1166
1226
|
|
1167
1227
|
|
1228
|
+
|
data/README.md
CHANGED
@@ -27,19 +27,8 @@ Then from your project's RAILS_ROOT, and in your development environment, run:
|
|
27
27
|
bundle install
|
28
28
|
rails generate airbrake --api-key your_key_here
|
29
29
|
|
30
|
-
That's it!
|
31
|
-
|
32
30
|
The generator creates a file under `config/initializers/airbrake.rb` configuring Airbrake with your API key. This file should be checked into your version control system so that it is deployed to your staging and production environments.
|
33
31
|
|
34
|
-
The default behaviour of the gem is to only operate in Rails environments that are NOT **development**, **test** & **cucumber**.
|
35
|
-
|
36
|
-
You can change this by altering this array:
|
37
|
-
|
38
|
-
config.development_environments = ["development", "test", "cucumber", "custom"]
|
39
|
-
|
40
|
-
Set it to empty array and it will report errors on all environments.
|
41
|
-
|
42
|
-
|
43
32
|
### Rails 2.x
|
44
33
|
|
45
34
|
Add the airbrake gem to your app. In config/environment.rb:
|
@@ -61,6 +50,34 @@ every server you deploy to has the gem installed or your application won't start
|
|
61
50
|
|
62
51
|
The generator creates a file under `config/initializers/airbrake.rb` configuring Airbrake with your API key. This file should be checked into your version control system so that it is deployed to your staging and production environments.
|
63
52
|
|
53
|
+
Ignored exceptions
|
54
|
+
------------------------
|
55
|
+
|
56
|
+
Exceptions raised from Rails environments named **development**, **test** or **cucumber** will be ignored by default.
|
57
|
+
|
58
|
+
You can clear the list of ignored environments with this setting:
|
59
|
+
|
60
|
+
config.development_environments = []
|
61
|
+
|
62
|
+
List of ignored exception classes includes:
|
63
|
+
|
64
|
+
ActiveRecord::RecordNotFound
|
65
|
+
ActionController::RoutingError
|
66
|
+
ActionController::InvalidAuthenticityToken
|
67
|
+
CGI::Session::CookieStore::TamperedWithCookie
|
68
|
+
ActionController::UnknownHttpMethod
|
69
|
+
ActionController::UnknownAction
|
70
|
+
AbstractController::ActionNotFound
|
71
|
+
Mongoid::Errors::DocumentNotFound
|
72
|
+
|
73
|
+
You can alter this list with
|
74
|
+
|
75
|
+
config.ignore_only = []
|
76
|
+
|
77
|
+
which will cause none of the exception classes to be ignored.
|
78
|
+
|
79
|
+
Check the [wiki](https://github.com/airbrake/airbrake/wiki/Customizing-your-airbrake.rb) for more customization options.
|
80
|
+
|
64
81
|
Supported frameworks
|
65
82
|
------------------------
|
66
83
|
|
@@ -76,18 +93,20 @@ https://github.com/airbrake/airbrake/wiki
|
|
76
93
|
Development
|
77
94
|
-----------
|
78
95
|
|
79
|
-
|
80
|
-
|
81
|
-
To run the test suite on your machine, you need to run the following commands:
|
96
|
+
For running unit tests, you should run
|
82
97
|
|
83
98
|
bundle
|
84
|
-
bundle exec rake
|
99
|
+
bundle exec rake test
|
85
100
|
|
86
|
-
|
101
|
+
If you wish to run the entire suite, which checks the different framework
|
102
|
+
integrations with cucumber, you should run the following commands
|
87
103
|
|
104
|
+
bundle
|
105
|
+
bundle exec rake appraisal:install
|
88
106
|
bundle exec rake
|
89
107
|
|
90
|
-
|
108
|
+
We use [Appraisals](https://github.com/thoughtbot/appraisal) to run the integration
|
109
|
+
tests.
|
91
110
|
|
92
111
|
Maintainers
|
93
112
|
-----------
|
data/Rakefile
CHANGED
@@ -13,17 +13,24 @@ end
|
|
13
13
|
require './lib/airbrake/version'
|
14
14
|
|
15
15
|
task :default do
|
16
|
-
exec 'rake
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
exec 'rake test'\
|
17
|
+
'&& rake appraisal:rails-3.2 integration_test'\
|
18
|
+
'&& rake appraisal:rails-3.1 integration_test'\
|
19
|
+
'&& rake appraisal:rails-3.0 integration_test'\
|
20
|
+
'&& rake appraisal cucumber'
|
21
21
|
end
|
22
22
|
|
23
23
|
desc 'Test the airbrake gem.'
|
24
24
|
Rake::TestTask.new(:test) do |t|
|
25
25
|
t.libs << 'lib'
|
26
|
-
t.pattern = 'test
|
26
|
+
t.pattern = 'test/*_test.rb'
|
27
|
+
t.verbose = true
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Test the integration of airbrake gem with Rails."
|
31
|
+
Rake::TestTask.new(:integration_test) do |t|
|
32
|
+
t.libs << 'lib'
|
33
|
+
t.pattern = 'test/integration.rb'
|
27
34
|
t.verbose = true
|
28
35
|
end
|
29
36
|
|
@@ -75,7 +82,7 @@ EOF
|
|
75
82
|
Version #{version} - #{Time.now}
|
76
83
|
===============================================================================
|
77
84
|
|
78
|
-
#{`git log $(git tag | grep -v rc | tail -1)..HEAD | git shortlog`}
|
85
|
+
#{`git log $(git tag | grep -v rc | sort --version-sort | tail -1)..HEAD | git shortlog`}
|
79
86
|
#{old}
|
80
87
|
EOF
|
81
88
|
end
|
@@ -144,4 +151,3 @@ Cucumber::Rake::Task.new(:cucumber) do |t|
|
|
144
151
|
t.fork = true
|
145
152
|
t.cucumber_opts = cucumber_opts
|
146
153
|
end
|
147
|
-
|
data/TESTED_AGAINST
CHANGED
data/airbrake.gemspec
CHANGED
@@ -14,23 +14,23 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.test_files = Dir.glob("{test,spec,features}/**/*")
|
15
15
|
|
16
16
|
s.add_runtime_dependency("builder")
|
17
|
-
s.add_runtime_dependency("activesupport")
|
18
17
|
s.add_runtime_dependency("json")
|
19
18
|
|
20
|
-
s.add_development_dependency("bourne", "
|
19
|
+
s.add_development_dependency("bourne", "~> 1.4.0")
|
21
20
|
s.add_development_dependency("cucumber-rails","~> 1.1.1")
|
22
21
|
s.add_development_dependency("fakeweb", "~> 1.3.0")
|
23
22
|
s.add_development_dependency("nokogiri", "~> 1.5.0")
|
24
23
|
s.add_development_dependency("rspec", "~> 2.6.0")
|
25
24
|
s.add_development_dependency("sham_rack", "~> 1.3.0")
|
25
|
+
s.add_development_dependency("json-schema", "~> 1.0.12")
|
26
26
|
s.add_development_dependency("capistrano")
|
27
27
|
s.add_development_dependency("aruba")
|
28
28
|
s.add_development_dependency("appraisal")
|
29
29
|
s.add_development_dependency("rspec-rails")
|
30
30
|
s.add_development_dependency("girl_friday")
|
31
|
-
s.add_development_dependency("json-schema")
|
32
31
|
s.add_development_dependency("shoulda-matchers")
|
33
32
|
s.add_development_dependency("shoulda-context")
|
33
|
+
s.add_development_dependency("pry")
|
34
34
|
|
35
35
|
s.authors = ["Airbrake"]
|
36
36
|
s.email = %q{support@airbrake.io}
|
data/features/metal.feature
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Feature: Rescue errors in Rails middleware
|
2
2
|
Background:
|
3
|
-
Given I successfully run `rails new rails_root -O --
|
3
|
+
Given I successfully run `rails new rails_root -O --skip-gemfile`
|
4
4
|
And I cd to "rails_root"
|
5
5
|
And I configure the notifier to use the following configuration lines:
|
6
6
|
"""
|
data/features/rails.feature
CHANGED
@@ -251,6 +251,7 @@ Feature: Install the Gem in a Rails application
|
|
251
251
|
"""
|
252
252
|
And I run `rails runner config/boot.rb`
|
253
253
|
Then I should see "Unsupported user attribute: 'shoe_size'"
|
254
|
+
And I should not see "Unsupported user attribute: 'id'"
|
254
255
|
|
255
256
|
Scenario: It should log the notice when failure happens
|
256
257
|
When Airbrake server is not responding
|
data/features/rake.feature
CHANGED
@@ -3,6 +3,10 @@ Feature: Use the Gem to catch errors in a Rake application
|
|
3
3
|
Background:
|
4
4
|
Given I've prepared the Rakefile
|
5
5
|
|
6
|
+
Scenario: Ignoring exceptions
|
7
|
+
When I run rake with airbrake ignored
|
8
|
+
Then Airbrake should not catch the exception
|
9
|
+
|
6
10
|
Scenario: Catching exceptions in Rake
|
7
11
|
When I run rake with airbrake
|
8
12
|
Then Airbrake should catch the exception
|
data/features/sinatra.feature
CHANGED
@@ -25,7 +25,7 @@ Feature: Use the notifier in a Sinatra app
|
|
25
25
|
"""
|
26
26
|
When I perform a Rack request to "http://example.com:123/test/index?param=value"
|
27
27
|
Then I should receive a Airbrake notification
|
28
|
-
|
28
|
+
|
29
29
|
Scenario: Catching environment name in modular Sinatra app
|
30
30
|
Given the following Rack app:
|
31
31
|
"""
|
@@ -53,3 +53,74 @@ Feature: Use the notifier in a Sinatra app
|
|
53
53
|
When I perform a Rack request to "http://example.com:123/test/index?param=value"
|
54
54
|
Then I should receive a Airbrake notification
|
55
55
|
And the output should contain "Env: production"
|
56
|
+
|
57
|
+
Scenario: Warnings when environment name wasn't determined automatically
|
58
|
+
Given the following Rack app:
|
59
|
+
"""
|
60
|
+
require 'sinatra/base'
|
61
|
+
require 'airbrake'
|
62
|
+
require 'logger'
|
63
|
+
|
64
|
+
Airbrake.configure do |config|
|
65
|
+
config.api_key = 'my_api_key'
|
66
|
+
config.logger = Logger.new STDOUT
|
67
|
+
config.development_environments = []
|
68
|
+
end
|
69
|
+
|
70
|
+
class DummyMiddleware
|
71
|
+
def initialize(app)
|
72
|
+
@app = app
|
73
|
+
end
|
74
|
+
|
75
|
+
def call(env)
|
76
|
+
@app.call(env)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class FontaneApp < Sinatra::Base
|
81
|
+
|
82
|
+
use Airbrake::Sinatra
|
83
|
+
|
84
|
+
use DummyMiddleware
|
85
|
+
|
86
|
+
set :environment, :production
|
87
|
+
|
88
|
+
get "/test/index" do
|
89
|
+
raise "Sinatra has left the building"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
app = FontaneApp
|
94
|
+
"""
|
95
|
+
When I perform a Rack request to "http://example.com:123/test/index?param=value"
|
96
|
+
Then I should receive a Airbrake notification
|
97
|
+
And the output should contain "Please set your environment name manually"
|
98
|
+
|
99
|
+
Scenario: Give precendence to environment name that was first set
|
100
|
+
Given the following Rack app:
|
101
|
+
"""
|
102
|
+
require 'sinatra/base'
|
103
|
+
require 'airbrake'
|
104
|
+
require 'logger'
|
105
|
+
|
106
|
+
Airbrake.configure do |config|
|
107
|
+
config.api_key = 'my_api_key'
|
108
|
+
config.logger = Logger.new STDOUT
|
109
|
+
config.environment_name = "staging"
|
110
|
+
end
|
111
|
+
|
112
|
+
class FontaneApp < Sinatra::Base
|
113
|
+
use Airbrake::Sinatra
|
114
|
+
|
115
|
+
set :environment, :production
|
116
|
+
|
117
|
+
get "/test/index" do
|
118
|
+
raise "Sinatra has left the building"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
app = FontaneApp
|
123
|
+
"""
|
124
|
+
When I perform a Rack request to "http://example.com:123/test/index?param=value"
|
125
|
+
Then I should receive a Airbrake notification
|
126
|
+
And the output should contain "Env: staging"
|
@@ -5,7 +5,10 @@ require 'rubygems'
|
|
5
5
|
require 'airbrake'
|
6
6
|
require 'airbrake/rake_handler'
|
7
7
|
|
8
|
+
class IgnoredException < StandardError; end
|
9
|
+
|
8
10
|
Airbrake.configure do |c|
|
11
|
+
c.ignore_rake_only = ["IgnoredException"]
|
9
12
|
end
|
10
13
|
|
11
14
|
# Should catch exception
|
@@ -22,6 +25,13 @@ task :airbrake_disabled do
|
|
22
25
|
raise_exception
|
23
26
|
end
|
24
27
|
|
28
|
+
# Should ignore the exception
|
29
|
+
task :airbrake_ignored do
|
30
|
+
Airbrake.configuration.rescue_rake_exceptions = true
|
31
|
+
stub_tty_output(true)
|
32
|
+
raise_exception(IgnoredException)
|
33
|
+
end
|
34
|
+
|
25
35
|
# Should not catch exception as tty_output is true
|
26
36
|
task :airbrake_autodetect_from_terminal do
|
27
37
|
Airbrake.configuration.rescue_rake_exceptions = nil
|
@@ -44,8 +54,8 @@ task :airbrake_not_yet_configured do
|
|
44
54
|
end
|
45
55
|
|
46
56
|
module Airbrake
|
47
|
-
def self.
|
48
|
-
$stderr.puts "[airbrake] #{
|
57
|
+
def self.send_notice(notice)
|
58
|
+
$stderr.puts "[airbrake] #{notice.component}"
|
49
59
|
end
|
50
60
|
end
|
51
61
|
|
@@ -62,6 +72,6 @@ def stub_tty_output(value)
|
|
62
72
|
end
|
63
73
|
end
|
64
74
|
|
65
|
-
def raise_exception
|
66
|
-
raise 'TEST'
|
75
|
+
def raise_exception(exception_class = StandardError)
|
76
|
+
raise exception_class.new('TEST')
|
67
77
|
end
|
@@ -49,14 +49,14 @@ class AirbrakeGenerator < Rails::Generator::Base
|
|
49
49
|
def determine_api_key
|
50
50
|
puts "Attempting to determine your API Key from Heroku..."
|
51
51
|
ENV['HOPTOAD_API_KEY'] = heroku_api_key
|
52
|
-
if ENV['HOPTOAD_API_KEY']
|
52
|
+
if ENV['HOPTOAD_API_KEY'] =~ /\S/
|
53
|
+
puts "... Done."
|
54
|
+
puts "Heroku's Airbrake API Key is '#{ENV['HOPTOAD_API_KEY']}'"
|
55
|
+
else
|
53
56
|
puts "... Failed."
|
54
57
|
puts "WARNING: We were unable to detect the Airbrake API Key from your Heroku environment."
|
55
58
|
puts "Your Heroku application environment may not be configured correctly."
|
56
59
|
exit 1
|
57
|
-
else
|
58
|
-
puts "... Done."
|
59
|
-
puts "Heroku's Airbrake API Key is '#{ENV['HOPTOAD_API_KEY']}'"
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -66,7 +66,7 @@ class AirbrakeGenerator < Rails::Generator::Base
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def heroku_api_key
|
69
|
-
heroku_var("(hoptoad|airbrake)_api_key",options[:app]).split.find {|x| x
|
69
|
+
heroku_var("(hoptoad|airbrake)_api_key",options[:app]).split.find {|x| x =~ /\S/ }
|
70
70
|
end
|
71
71
|
|
72
72
|
def heroku?
|
data/lib/airbrake.rb
CHANGED
@@ -8,14 +8,6 @@ require 'net/https'
|
|
8
8
|
require 'rubygems'
|
9
9
|
require 'logger'
|
10
10
|
|
11
|
-
begin
|
12
|
-
require 'active_support/core_ext/object/blank'
|
13
|
-
rescue
|
14
|
-
require 'activesupport'
|
15
|
-
require 'activesupport/core_ext'
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
11
|
require 'airbrake/version'
|
20
12
|
require 'airbrake/configuration'
|
21
13
|
require 'airbrake/notice'
|
@@ -66,6 +58,7 @@ module Airbrake
|
|
66
58
|
info = "[Ruby: #{RUBY_VERSION}]"
|
67
59
|
info << " [#{configuration.framework}]" if configuration.framework
|
68
60
|
info << " [Env: #{configuration.environment_name}]" if configuration.environment_name
|
61
|
+
info
|
69
62
|
end
|
70
63
|
|
71
64
|
# Writes out the given message to the #logger
|
@@ -76,7 +69,7 @@ module Airbrake
|
|
76
69
|
# Look for the Rails logger currently defined
|
77
70
|
def logger
|
78
71
|
self.configuration.logger ||
|
79
|
-
Logger.new(
|
72
|
+
Logger.new(nil)
|
80
73
|
end
|
81
74
|
|
82
75
|
# Call this method to modify defaults in your initializers.
|