rails_exception_handler 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +4 -1
- data/Gemfile +6 -7
- data/Gemfile.lock +63 -54
- data/HISTORY +7 -0
- data/README.markdown +94 -87
- data/VERSION +1 -1
- data/lib/generators/rails_exception_handler/templates/rails_exception_handler.rb +1 -1
- data/lib/rails_exception_handler/storage.rb +1 -1
- data/rails_exception_handler.gemspec +11 -11
- metadata +8 -8
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,15 +1,14 @@
|
|
1
|
-
# A sample Gemfile
|
2
1
|
source "http://rubygems.org"
|
3
2
|
|
4
3
|
group :test, :development do
|
5
4
|
|
6
|
-
gem "rails", '3.0.12'
|
7
|
-
gem "rack-test", '0.5.7'
|
8
|
-
gem "mysql2", '0.2.6'
|
5
|
+
#gem "rails", '3.0.12'
|
6
|
+
#gem "rack-test", '0.5.7'
|
7
|
+
#gem "mysql2", '0.2.6'
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
gem "rails", '3.2.3'
|
10
|
+
gem "rack-test", '0.6.1'
|
11
|
+
gem 'mysql2', '0.3.11'
|
13
12
|
|
14
13
|
gem 'pry'
|
15
14
|
gem "rspec-rails"
|
data/Gemfile.lock
CHANGED
@@ -1,84 +1,88 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rails_exception_handler (
|
4
|
+
rails_exception_handler (2.0.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
rack (~> 1.2
|
20
|
-
rack-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
arel (
|
37
|
-
builder (
|
9
|
+
actionmailer (3.2.3)
|
10
|
+
actionpack (= 3.2.3)
|
11
|
+
mail (~> 2.4.4)
|
12
|
+
actionpack (3.2.3)
|
13
|
+
activemodel (= 3.2.3)
|
14
|
+
activesupport (= 3.2.3)
|
15
|
+
builder (~> 3.0.0)
|
16
|
+
erubis (~> 2.7.0)
|
17
|
+
journey (~> 1.0.1)
|
18
|
+
rack (~> 1.4.0)
|
19
|
+
rack-cache (~> 1.2)
|
20
|
+
rack-test (~> 0.6.1)
|
21
|
+
sprockets (~> 2.1.2)
|
22
|
+
activemodel (3.2.3)
|
23
|
+
activesupport (= 3.2.3)
|
24
|
+
builder (~> 3.0.0)
|
25
|
+
activerecord (3.2.3)
|
26
|
+
activemodel (= 3.2.3)
|
27
|
+
activesupport (= 3.2.3)
|
28
|
+
arel (~> 3.0.2)
|
29
|
+
tzinfo (~> 0.3.29)
|
30
|
+
activeresource (3.2.3)
|
31
|
+
activemodel (= 3.2.3)
|
32
|
+
activesupport (= 3.2.3)
|
33
|
+
activesupport (3.2.3)
|
34
|
+
i18n (~> 0.6)
|
35
|
+
multi_json (~> 1.0)
|
36
|
+
arel (3.0.2)
|
37
|
+
builder (3.0.0)
|
38
38
|
coderay (1.0.6)
|
39
39
|
diff-lcs (1.1.3)
|
40
|
-
erubis (2.
|
41
|
-
abstract (>= 1.0.0)
|
40
|
+
erubis (2.7.0)
|
42
41
|
git (1.2.5)
|
43
|
-
|
42
|
+
hike (1.2.1)
|
43
|
+
i18n (0.6.0)
|
44
44
|
jeweler (1.8.3)
|
45
45
|
bundler (~> 1.0)
|
46
46
|
git (>= 1.2.5)
|
47
47
|
rake
|
48
48
|
rdoc
|
49
|
+
journey (1.0.3)
|
49
50
|
json (1.7.3)
|
50
|
-
mail (2.
|
51
|
-
activesupport (>= 2.3.6)
|
51
|
+
mail (2.4.4)
|
52
52
|
i18n (>= 0.4.0)
|
53
53
|
mime-types (~> 1.16)
|
54
54
|
treetop (~> 1.4.8)
|
55
55
|
method_source (0.7.1)
|
56
56
|
mime-types (1.18)
|
57
|
-
|
57
|
+
multi_json (1.3.5)
|
58
|
+
mysql2 (0.3.11)
|
58
59
|
polyglot (0.3.3)
|
59
60
|
pry (0.9.9.6)
|
60
61
|
coderay (~> 1.0.5)
|
61
62
|
method_source (~> 0.7.1)
|
62
63
|
slop (>= 2.4.4, < 3)
|
63
|
-
rack (1.
|
64
|
-
rack-
|
65
|
-
rack (>=
|
66
|
-
rack-
|
64
|
+
rack (1.4.1)
|
65
|
+
rack-cache (1.2)
|
66
|
+
rack (>= 0.4)
|
67
|
+
rack-ssl (1.3.2)
|
68
|
+
rack
|
69
|
+
rack-test (0.6.1)
|
67
70
|
rack (>= 1.0)
|
68
|
-
rails (3.
|
69
|
-
actionmailer (= 3.
|
70
|
-
actionpack (= 3.
|
71
|
-
activerecord (= 3.
|
72
|
-
activeresource (= 3.
|
73
|
-
activesupport (= 3.
|
71
|
+
rails (3.2.3)
|
72
|
+
actionmailer (= 3.2.3)
|
73
|
+
actionpack (= 3.2.3)
|
74
|
+
activerecord (= 3.2.3)
|
75
|
+
activeresource (= 3.2.3)
|
76
|
+
activesupport (= 3.2.3)
|
74
77
|
bundler (~> 1.0)
|
75
|
-
railties (= 3.
|
76
|
-
railties (3.
|
77
|
-
actionpack (= 3.
|
78
|
-
activesupport (= 3.
|
78
|
+
railties (= 3.2.3)
|
79
|
+
railties (3.2.3)
|
80
|
+
actionpack (= 3.2.3)
|
81
|
+
activesupport (= 3.2.3)
|
82
|
+
rack-ssl (~> 1.3.2)
|
79
83
|
rake (>= 0.8.7)
|
80
84
|
rdoc (~> 3.4)
|
81
|
-
thor (~> 0.14.
|
85
|
+
thor (~> 0.14.6)
|
82
86
|
rake (0.9.2.2)
|
83
87
|
rdoc (3.12)
|
84
88
|
json (~> 1.4)
|
@@ -96,7 +100,12 @@ GEM
|
|
96
100
|
railties (>= 3.0)
|
97
101
|
rspec (~> 2.10.0)
|
98
102
|
slop (2.4.4)
|
103
|
+
sprockets (2.1.3)
|
104
|
+
hike (~> 1.2)
|
105
|
+
rack (~> 1.0)
|
106
|
+
tilt (~> 1.1, != 1.3.0)
|
99
107
|
thor (0.14.6)
|
108
|
+
tilt (1.3.3)
|
100
109
|
treetop (1.4.10)
|
101
110
|
polyglot
|
102
111
|
polyglot (>= 0.3.1)
|
@@ -107,9 +116,9 @@ PLATFORMS
|
|
107
116
|
|
108
117
|
DEPENDENCIES
|
109
118
|
jeweler
|
110
|
-
mysql2 (= 0.
|
119
|
+
mysql2 (= 0.3.11)
|
111
120
|
pry
|
112
|
-
rack-test (= 0.
|
113
|
-
rails (= 3.
|
121
|
+
rack-test (= 0.6.1)
|
122
|
+
rails (= 3.2.3)
|
114
123
|
rails_exception_handler!
|
115
124
|
rspec-rails
|
data/HISTORY
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
|
3
|
+
v2.0.1 - May 2u7th 2012
|
4
|
+
- Fix ruby187 issue and a typo in the generator
|
5
|
+
|
6
|
+
v2.0.0 - May 15th 2012
|
7
|
+
- New API for specifying what information to store about the request, exception and environment
|
8
|
+
- Added a generator that creates an initializer
|
9
|
+
|
3
10
|
v1.4.0 - March 10th 2012
|
4
11
|
- Rails 3.2.2 fixes
|
5
12
|
- Added after_initialize callback
|
data/README.markdown
CHANGED
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
Upgrading from version 1? [See wiki](https://github.com/Sharagoz/rails_exception_handler/wiki/Version-2.0-upgrade-instructions)
|
4
4
|
|
5
|
-
This is a flexible exception handler for Rails 3 built as Rack middleware. It
|
5
|
+
This is a flexible exception handler for Rails 3 built as Rack middleware. It is aimed at experienced Rails developers who are administrating more than just a couple of rails applications. Dont be intimidated if you're new to rails though, it's not that hard to set up.
|
6
|
+
|
7
|
+
The exception handler enables you to save the key information from the error message in a database somewhere and display a customized error message to the user within the applications layout file. You can hook this exception handler into all your rails apps and gather the exception reports in one place. The exception handler just contains the back end, you will have to create your own front end to view and manage the error reports.
|
6
8
|
|
7
9
|
Does your app have an authorization mechanism? [See wiki](https://github.com/Sharagoz/rails_exception_handler/wiki/Interaction-with-authorization-mechanisms)
|
8
10
|
|
@@ -11,6 +13,7 @@ Do you need to catch ruby errors outside of Rack? [See wiki](https://github.com/
|
|
11
13
|
## Compatiblity
|
12
14
|
|
13
15
|
The gem should work with all versions of Rails 3. It does not work with Rails 2.
|
16
|
+
|
14
17
|
See Travis-CI for info on which rubies it is tested against:
|
15
18
|
http://travis-ci.org/#!/Sharagoz/rails_exception_handler
|
16
19
|
|
@@ -21,10 +24,15 @@ Add the line below to your gemfile and run bundler
|
|
21
24
|
gem 'rails_exception_handler', "~> 2"
|
22
25
|
```
|
23
26
|
|
24
|
-
|
27
|
+
Generate an initializer:
|
28
|
+
|
29
|
+
```
|
30
|
+
"rails g rails_exception_handler:install
|
31
|
+
```
|
25
32
|
|
33
|
+
Open config/initializers/rails_exception_handler.rb, have a quick look and read on.
|
26
34
|
|
27
|
-
##
|
35
|
+
## Configuring the basics
|
28
36
|
|
29
37
|
### environments
|
30
38
|
An array of symbols that says which Rails environments you want the exception handler to run in.
|
@@ -35,16 +43,6 @@ config.environments = [:production, :test, :development]
|
|
35
43
|
|
36
44
|
Default value: [:production]
|
37
45
|
|
38
|
-
### storage_strategies
|
39
|
-
An array of zero or more symbols that says which storage strategies you want to use. Each are explained in detail in separate sections at the end of this document.
|
40
|
-
|
41
|
-
```ruby
|
42
|
-
config.storage_strategies = [:active_record, :rails_log, :remote_url => {:target => 'http://example.com'}]
|
43
|
-
```
|
44
|
-
|
45
|
-
Default value: []
|
46
|
-
|
47
|
-
|
48
46
|
### fallback_layout
|
49
47
|
|
50
48
|
```ruby
|
@@ -55,23 +53,15 @@ Default value: 'application'
|
|
55
53
|
|
56
54
|
The exception handler will always use the layout file of the controller action that was accessed when the error occured. However, when routing errors occures there are no controller action to get this layout from, so it falls back to the default 'application' layout that most apps have. If your application does not have a layout file called 'application', then you need to override this, otherwise a "missing layout" exception will occur.
|
57
55
|
|
58
|
-
###
|
59
|
-
|
60
|
-
Having some way of identifying the user can be very useful at times, so I always store information on who generated the exception in applications that have a log in feature.
|
61
|
-
To enable this you need to specify the name of the controller method that provides the user object and the name of the field which contains the info you want to save.
|
62
|
-
|
63
|
-
```ruby
|
64
|
-
config.store_user_info = {:method => :current_user, :field => :login}
|
65
|
-
```
|
56
|
+
### after_initialize
|
66
57
|
|
67
|
-
|
68
|
-
If you turn this on and the error is generated by a client that is not logged in, then "Anonymous" will be used.
|
58
|
+
This is a callback that exists in case you need to do something right after the initializer has been run, for instance [interact with an authorization mechanism](https://github.com/Sharagoz/rails_exception_handler/wiki/Interaction-with-authorization-mechanisms)
|
69
59
|
|
70
60
|
### responses and response_mapping
|
71
61
|
|
72
62
|
Note: public/500.html and public/400.html will be used if these exists. Remove these files before applying the configuration below.
|
73
63
|
|
74
|
-
Create a set of responses and then map specific exceptions to these responses. There needs to be a response called :default which is used for the exceptions that are not
|
64
|
+
Create a set of responses and then map specific exceptions to these responses. There needs to be a response called :default which is used for the exceptions that are not explicitly mapped to a response.
|
75
65
|
|
76
66
|
```ruby
|
77
67
|
config.responses = {
|
@@ -89,60 +79,9 @@ config.response_mapping = {
|
|
89
79
|
}
|
90
80
|
```
|
91
81
|
|
92
|
-
|
93
|
-
|
94
|
-
This callback exists in case you need to do something right after the initializer has been run, for instance [interact with an authorization mechanism](https://github.com/Sharagoz/rails_exception_handler/wiki/Interaction-with-authorization-mechanisms)
|
82
|
+
# Gathering exception information
|
95
83
|
|
96
|
-
|
97
|
-
|
98
|
-
All filters are disabled by default. I recommend you deploy your application this way, and then add filters as they become necessary.
|
99
|
-
The only reason I've ever wanted filtering have been due to what seem like poorly programmed web crawlers and black bots probing for security holes. If legitimate web crawlers are a problem for you, look into tweaking your robots.txt file before enabling exception filters.
|
100
|
-
|
101
|
-
**:all_404s**
|
102
|
-
|
103
|
-
```ruby
|
104
|
-
config.filters = [:all_404s]
|
105
|
-
```
|
106
|
-
|
107
|
-
When turned on the following exceptions will no longer be stored: ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound
|
108
|
-
Consider this a last resort. You will miss all "real" 404s when this is turned on, like broken redirections.
|
109
|
-
|
110
|
-
**:anon_404s**
|
111
|
-
|
112
|
-
```ruby
|
113
|
-
config.filters = [:anon_404s]
|
114
|
-
```
|
115
|
-
|
116
|
-
When turned on the following exceptions will no longer be stored unless a user is logged in: ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound
|
117
|
-
|
118
|
-
**:no_referer_404s**
|
119
|
-
|
120
|
-
```ruby
|
121
|
-
config.filters = [:no_referer_404s]
|
122
|
-
```
|
123
|
-
|
124
|
-
ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound will be ignored if it was caused by a request without a referer.
|
125
|
-
This is very effective against bots. 99.9% of the time a routing error with no referer will be caused by a bot, and then once in a while it will be caused by a real user that happened to generate an error on the first page he opened (like a broken bookmark). You will get a lot less false positives with this filter than :all_404s.
|
126
|
-
|
127
|
-
**:user_agent_regxp**
|
128
|
-
|
129
|
-
Legit software will usually add something to the user agent string to let you know who they are. You can use this to filter out the errors they generate, and be pretty sure you are not going to get any false positives.
|
130
|
-
|
131
|
-
```ruby
|
132
|
-
config.filters = [:user_agent_regxp => /\b(ZyBorg|Yandex|Jyxobot)\b/i]
|
133
|
-
```
|
134
|
-
|
135
|
-
If you (like me) dont know regular expressions by heart, then http://www.rubular.com/ is great tool to use when creating a regxp.
|
136
|
-
|
137
|
-
**:target_url_regxp**
|
138
|
-
|
139
|
-
Sometimes black bots add a common user agent string and a referer to their requests to cloak themselfs, which makes it hard to filter them without filtering all routing errors. What you can often do is to filter on what they target, which is usually security holes in some well known library/plugin (usually in php). The example below will filter out all URLs containing ".php". This is the filter I most commonly use myself. Without it, it is only a matter of time before I'll one day get 200 exceptions in 10mins caused by a bot looking for security holes in myPhpAdmin or some other PHP plugin.
|
140
|
-
|
141
|
-
```ruby
|
142
|
-
config.filters = [:target_url_regxp => /\.php/i]
|
143
|
-
```
|
144
|
-
|
145
|
-
## Gathering exception information
|
84
|
+
Gathering and storing exception information is optional, but still the main purpose of this exception handler.
|
146
85
|
|
147
86
|
The following for methods exists for extracting the information you need. You are given direct access to the relevant objects, which means full flexibility, but also more work on your part.
|
148
87
|
The initializers contains a basic suggestion, you can check out [the wiki](https://github.com/Sharagoz/rails_exception_handler/wiki/Extracting-exception-info)
|
@@ -161,14 +100,31 @@ config.store_global_info do |storage|
|
|
161
100
|
end
|
162
101
|
```
|
163
102
|
|
164
|
-
|
103
|
+
### store_user_info
|
104
|
+
|
105
|
+
Having some way of identifying the user can be very useful at times, so I always store information on who generated the exception in applications that have a log in feature.
|
106
|
+
Since extracting current_user from the environment variable takes a little bit of work, this helper method exists to make it easier. The user info are stored in a field called "user_info".
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
config.store_user_info = {:method => :current_user, :field => :login}
|
110
|
+
```
|
111
|
+
|
112
|
+
Default value: false (no info will be stored)
|
113
|
+
If you turn this on and the error is generated by a client that is not logged in, then "Anonymous" will be used.
|
114
|
+
|
115
|
+
# Storing the exception
|
116
|
+
|
117
|
+
No storage strategies are enabled by default. You can enable more than one storage strategy.
|
118
|
+
|
119
|
+
### Through active_record
|
120
|
+
|
165
121
|
```ruby
|
166
122
|
config.storage_strategies = [:active_record]
|
167
123
|
```
|
168
|
-
This means that the error reports will be stored through active record directly to a database
|
124
|
+
This means that the error reports will be stored through active record directly to a database. A new entry called **exception_database** is needed in **database.yml**:
|
125
|
+
For mysql the entry would look something like this:
|
169
126
|
|
170
127
|
```
|
171
|
-
# for mysql the entry would look something like this:
|
172
128
|
exception_database:
|
173
129
|
adapter: mysql2
|
174
130
|
encoding: utf8
|
@@ -180,7 +136,7 @@ exception_database:
|
|
180
136
|
host: 127.0.0.1
|
181
137
|
```
|
182
138
|
|
183
|
-
You could of course store the error messages in the same database as the application uses, but one of the main purposes of this
|
139
|
+
You could of course store the error messages in the same database as the application uses, but one of the main purposes of this exception handler is to enable you to easily store error reports from many applications in the same database, so I recommend you set up a separate dedicated database for this.
|
184
140
|
|
185
141
|
The exception database needs a table called **error_messages**. Here's a migration script that you can use to create the table with the necessary fields required for the default configuration:
|
186
142
|
|
@@ -209,7 +165,7 @@ class CreateErrorMessages < ActiveRecord::Migration
|
|
209
165
|
end
|
210
166
|
```
|
211
167
|
|
212
|
-
|
168
|
+
### Saving to the rails log
|
213
169
|
|
214
170
|
```ruby
|
215
171
|
config.storage_strategies = [:rails_log]
|
@@ -231,22 +187,73 @@ activesupport (3.0.7) lib/active_support/notifications.rb:54:in `instrument'
|
|
231
187
|
(the rest of the stack trace has been omitted from the example)
|
232
188
|
```
|
233
189
|
|
234
|
-
|
190
|
+
### Sending the error report as an HTTP POST request to another application
|
191
|
+
|
235
192
|
```ruby
|
236
193
|
config.storage_strategies = [:remote_url => {:target => 'http://example.com/error_messages'}]
|
237
194
|
```
|
195
|
+
|
238
196
|
This option is meant for those who want to store the exception in a database table, but does not have direct access to the database itself, making active record store unsuitable. You need a web app on a server that has access to the database. An HTTP POST request will be sent to the specified URL with the error message as data.
|
239
197
|
If you use a Rails app at the other end you should simply be able to do _ErrorMessage.create(params[:error_message])_ to save the report.
|
240
198
|
|
241
|
-
|
199
|
+
# Exception filters
|
200
|
+
|
201
|
+
Sometimes it is necessary to filter errors. All filters are disabled by default and I recommend you deploy your application this way initially, and then add filters as they become necessary.
|
202
|
+
The only reason I've ever wanted filtering have been due to what seem like poorly programmed web crawlers and black bots probing for security holes. If legitimate web crawlers are a problem for you, look into tweaking your robots.txt file before enabling exception filters.
|
203
|
+
|
204
|
+
### :all_404s
|
205
|
+
|
206
|
+
```ruby
|
207
|
+
config.filters = [:all_404s]
|
208
|
+
```
|
209
|
+
|
210
|
+
When turned on the following exceptions will no longer be stored: ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound
|
211
|
+
Consider this a last resort. You will miss all "real" 404s when this is turned on, like broken redirections.
|
212
|
+
|
213
|
+
### :anon_404s
|
214
|
+
|
215
|
+
```ruby
|
216
|
+
config.filters = [:anon_404s]
|
217
|
+
```
|
218
|
+
|
219
|
+
When turned on the following exceptions will no longer be stored unless a user is logged in: ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound
|
220
|
+
|
221
|
+
### :no_referer_404s
|
222
|
+
|
223
|
+
```ruby
|
224
|
+
config.filters = [:no_referer_404s]
|
225
|
+
```
|
226
|
+
|
227
|
+
ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound will be ignored if it was caused by a request without a referer.
|
228
|
+
This is very effective against bots. 99.9% of the time a routing error with no referer will be caused by a bot, and then once in a while it will be caused by a real user that happened to generate an error on the first page he opened (like a broken bookmark). You will get a lot less false positives with this filter than :all_404s.
|
229
|
+
|
230
|
+
### :user_agent_regxp
|
231
|
+
|
232
|
+
Legit software will usually add something to the user agent string to let you know who they are. You can use this to filter out the errors they generate, and be pretty sure you are not going to get any false positives.
|
233
|
+
|
234
|
+
```ruby
|
235
|
+
config.filters = [:user_agent_regxp => /\b(ZyBorg|Yandex|Jyxobot)\b/i]
|
236
|
+
```
|
237
|
+
|
238
|
+
If you (like me) dont know regular expressions by heart, then http://www.rubular.com/ is great tool to use when creating a regxp.
|
239
|
+
|
240
|
+
### :target_url_regxp
|
241
|
+
|
242
|
+
Sometimes black bots add a common user agent string and a referer to their requests to cloak themselfs, which makes it hard to filter them without filtering all routing errors. What you can often do is to filter on what they target, which is usually security holes in some widely used library/plugin. The example below will filter out all URLs containing ".php". This is the filter I most commonly use myself. Without it, it is only a matter of time before I'll one day get 200 exceptions in 10mins caused by a bot looking for security holes in myPhpAdmin or some other PHP library.
|
243
|
+
|
244
|
+
```ruby
|
245
|
+
config.filters = [:target_url_regxp => /\.php/i]
|
246
|
+
```
|
247
|
+
|
248
|
+
# Contributors
|
242
249
|
|
243
|
-
David Rice
|
250
|
+
David Rice and James Harrison
|
244
251
|
|
245
252
|
Would you like to contribute? Here are some things on the todo list:
|
246
253
|
|
247
254
|
* A mongoid storage strategy for those that wish to use MongoDB
|
248
255
|
* An email storage strategy for those that wish to be notified of the exceptions through email
|
249
256
|
|
250
|
-
|
257
|
+
# Licence
|
251
258
|
|
252
|
-
Copyright ©
|
259
|
+
Copyright © 2012 Bjørn Trondsen, released under the MIT license
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.1
|
@@ -32,7 +32,7 @@ RailsExceptionHandler.configure do |config|
|
|
32
32
|
storage[:user_agent] = request.user_agent
|
33
33
|
end
|
34
34
|
|
35
|
-
config.store_exception_info do |storage,
|
35
|
+
config.store_exception_info do |storage,exception|
|
36
36
|
storage[:class_name] = exception.class.to_s
|
37
37
|
storage[:message] = exception.to_s
|
38
38
|
storage[:trace] = exception.backtrace.join("\n")
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "rails_exception_handler"
|
8
|
-
s.version = "2.0.
|
8
|
+
s.version = "2.0.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Sharagoz"]
|
12
|
-
s.date = "2012-05-
|
12
|
+
s.date = "2012-05-27"
|
13
13
|
s.description = ""
|
14
14
|
s.email = "contact@sharagoz.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -59,26 +59,26 @@ Gem::Specification.new do |s|
|
|
59
59
|
s.specification_version = 3
|
60
60
|
|
61
61
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
62
|
-
s.add_development_dependency(%q<rails>, ["= 3.
|
63
|
-
s.add_development_dependency(%q<rack-test>, ["= 0.
|
64
|
-
s.add_development_dependency(%q<mysql2>, ["= 0.
|
62
|
+
s.add_development_dependency(%q<rails>, ["= 3.2.3"])
|
63
|
+
s.add_development_dependency(%q<rack-test>, ["= 0.6.1"])
|
64
|
+
s.add_development_dependency(%q<mysql2>, ["= 0.3.11"])
|
65
65
|
s.add_development_dependency(%q<pry>, [">= 0"])
|
66
66
|
s.add_development_dependency(%q<rspec-rails>, [">= 0"])
|
67
67
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
68
68
|
s.add_development_dependency(%q<rails_exception_handler>, [">= 0"])
|
69
69
|
else
|
70
|
-
s.add_dependency(%q<rails>, ["= 3.
|
71
|
-
s.add_dependency(%q<rack-test>, ["= 0.
|
72
|
-
s.add_dependency(%q<mysql2>, ["= 0.
|
70
|
+
s.add_dependency(%q<rails>, ["= 3.2.3"])
|
71
|
+
s.add_dependency(%q<rack-test>, ["= 0.6.1"])
|
72
|
+
s.add_dependency(%q<mysql2>, ["= 0.3.11"])
|
73
73
|
s.add_dependency(%q<pry>, [">= 0"])
|
74
74
|
s.add_dependency(%q<rspec-rails>, [">= 0"])
|
75
75
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
76
76
|
s.add_dependency(%q<rails_exception_handler>, [">= 0"])
|
77
77
|
end
|
78
78
|
else
|
79
|
-
s.add_dependency(%q<rails>, ["= 3.
|
80
|
-
s.add_dependency(%q<rack-test>, ["= 0.
|
81
|
-
s.add_dependency(%q<mysql2>, ["= 0.
|
79
|
+
s.add_dependency(%q<rails>, ["= 3.2.3"])
|
80
|
+
s.add_dependency(%q<rack-test>, ["= 0.6.1"])
|
81
|
+
s.add_dependency(%q<mysql2>, ["= 0.3.11"])
|
82
82
|
s.add_dependency(%q<pry>, [">= 0"])
|
83
83
|
s.add_dependency(%q<rspec-rails>, [">= 0"])
|
84
84
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_exception_handler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 3.
|
21
|
+
version: 3.2.3
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 3.
|
29
|
+
version: 3.2.3
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rack-test
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - '='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.
|
37
|
+
version: 0.6.1
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - '='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.
|
45
|
+
version: 0.6.1
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: mysql2
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - '='
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
53
|
+
version: 0.3.11
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.3.11
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: pry
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|