rollbar 2.1.2 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +4 -17
- data/lib/generators/rollbar/templates/initializer.rb +1 -1
- data/lib/rollbar.rb +48 -12
- data/lib/rollbar/delay/girl_friday.rb +14 -8
- data/lib/rollbar/delay/resque.rb +6 -1
- data/lib/rollbar/delay/sidekiq.rb +7 -1
- data/lib/rollbar/delay/sucker_punch.rb +14 -1
- data/lib/rollbar/delay/thread.rb +12 -1
- data/lib/rollbar/version.rb +1 -1
- data/rollbar.gemspec +1 -1
- data/spec/delay/sidekiq_spec.rb +2 -2
- data/spec/delay/sucker_punch_spec.rb +1 -1
- data/spec/rollbar/delay/girl_friday_spec.rb +23 -1
- data/spec/rollbar/delay/resque_spec.rb +19 -3
- data/spec/rollbar/delay/thread_spec.rb +16 -3
- data/spec/rollbar_spec.rb +23 -8
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 245d598a698d57310a524065495b585450e183d8
|
4
|
+
data.tar.gz: ae4841097d594e0b58528806f3b151163e9b432a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43011a9710f91e3640dc5542d099b112ea4b2424842d2db8045a5f14444027ec225b15380539d7f38ecde2258744db6e74df31855b1a293c36d106c7ee2ac0dd
|
7
|
+
data.tar.gz: 47bfe86f356e5efa27fea9ef15c5150541d4c065c9d8c72f0def6c1ad2813d8ff0be5bc1381b0b9bea38f7df49f3fc3dfb03a3b23a362510da196a1391596668
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 2.2.0
|
4
|
+
|
5
|
+
New features:
|
6
|
+
|
7
|
+
- Raise internal exceptions when processing reports from async handlers, instead of swallowing them. This allows queue systems (e.g. Sidekiq, Resque) to track and retry errored jobs. See [#282](https://github.com/rollbar/rollbar-gem/pull/282)
|
8
|
+
- Send the error class name when reporting internal errors. See [#283](https://github.com/rollbar/rollbar-gem/pull/283)
|
9
|
+
|
3
10
|
## 2.1.2
|
4
11
|
|
5
12
|
Bug fix:
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Rollbar notifier for Ruby [](https://travis-ci.org/rollbar/rollbar-gem/branches)
|
2
2
|
|
3
3
|
<!-- RemoveNext -->
|
4
4
|
[Rollbar](https://rollbar.com) is an error tracking service for Ruby and other languages. The Rollbar service will alert you of problems with your code and help you understand them in a ways never possible before. We love it and we hope you will too.
|
@@ -12,7 +12,7 @@ This is the Ruby library for Rollbar. It will instrument many kinds of Ruby appl
|
|
12
12
|
Add this line to your application's Gemfile:
|
13
13
|
|
14
14
|
```ruby
|
15
|
-
gem 'rollbar', '~> 2.
|
15
|
+
gem 'rollbar', '~> 2.2.0'
|
16
16
|
```
|
17
17
|
|
18
18
|
And then execute:
|
@@ -518,11 +518,11 @@ You can supply your own handler using ```config.async_handler```. The object to
|
|
518
518
|
```ruby
|
519
519
|
config.use_async = true
|
520
520
|
config.async_handler = Proc.new { |payload|
|
521
|
-
Thread.new { Rollbar.
|
521
|
+
Thread.new { Rollbar.process_from_async_handler(payload) }
|
522
522
|
}
|
523
523
|
```
|
524
524
|
|
525
|
-
Make sure you pass ```payload``` to ```Rollbar.
|
525
|
+
Make sure you pass ```payload``` to ```Rollbar.process_from_async_handler``` in your own implementation.
|
526
526
|
|
527
527
|
## Failover handlers
|
528
528
|
|
@@ -666,19 +666,6 @@ You can find upgrading notes in [UPGRADING.md](UPGRADING.md).
|
|
666
666
|
|
667
667
|
## Known Issues
|
668
668
|
|
669
|
-
We've received some issues from users having problems when they use [Oj](https://github.com/ohler55/oj) as the JSON serialization library with [MultiJson](https://github.com/intridea/multi_json). To avoid these problems, we recommend upgrading to Oj version 2.11.0:
|
670
|
-
|
671
|
-
```ruby
|
672
|
-
gem 'oj', '~> 2.11.0'
|
673
|
-
```
|
674
|
-
|
675
|
-
If you are using Oj but cannot upgrade, you can work around this with:
|
676
|
-
|
677
|
-
```ruby
|
678
|
-
require 'json'
|
679
|
-
MultiJson.use(:json_common)
|
680
|
-
```
|
681
|
-
|
682
669
|
If you are using jRuby with Oracle and JDK7, you may be expecting some errors sending reports to our API. This is caused by a bug in that JDK and the primer number used in the SSL algorithm. In order to fix this you can set the next configuration:
|
683
670
|
|
684
671
|
```ruby
|
@@ -47,7 +47,7 @@ Rollbar.configure do |config|
|
|
47
47
|
# config.use_async = true
|
48
48
|
# Supply your own async handler:
|
49
49
|
# config.async_handler = Proc.new { |payload|
|
50
|
-
# Thread.new { Rollbar.
|
50
|
+
# Thread.new { Rollbar.process_from_async_handler(payload) }
|
51
51
|
# }
|
52
52
|
|
53
53
|
# Enable asynchronous reporting (using sucker_punch)
|
data/lib/rollbar.rb
CHANGED
@@ -17,7 +17,7 @@ require 'rollbar/logger_proxy'
|
|
17
17
|
require 'rollbar/exception_reporter'
|
18
18
|
require 'rollbar/util'
|
19
19
|
require 'rollbar/railtie' if defined?(Rails::VERSION)
|
20
|
-
require 'rollbar/delay/girl_friday'
|
20
|
+
require 'rollbar/delay/girl_friday' if defined?(GirlFriday)
|
21
21
|
require 'rollbar/delay/thread'
|
22
22
|
require 'rollbar/truncation'
|
23
23
|
|
@@ -27,7 +27,7 @@ module Rollbar
|
|
27
27
|
Rack::Multipart::UploadedFile
|
28
28
|
].freeze
|
29
29
|
PUBLIC_NOTIFIER_METHODS = %w(debug info warn warning error critical log logger
|
30
|
-
process_payload
|
30
|
+
process_payload process_from_async_handler scope send_failsafe log_info log_debug
|
31
31
|
log_warning log_error silenced)
|
32
32
|
|
33
33
|
class Notifier
|
@@ -195,10 +195,39 @@ module Rollbar
|
|
195
195
|
raise e
|
196
196
|
end
|
197
197
|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
198
|
+
# We will reraise exceptions in this method so async queues
|
199
|
+
# can retry the job or, in general, handle an error report some way.
|
200
|
+
#
|
201
|
+
# At same time that exception is silenced so we don't generate
|
202
|
+
# infinite reports. This example is what we want to avoid:
|
203
|
+
#
|
204
|
+
# 1. New exception in a the project is raised
|
205
|
+
# 2. That report enqueued to Sidekiq queue.
|
206
|
+
# 3. The Sidekiq job tries to send the report to our API
|
207
|
+
# 4. The report fails, for example cause a network failure,
|
208
|
+
# and a exception is raised
|
209
|
+
# 5. We report an internal error for that exception
|
210
|
+
# 6. We reraise the exception so Sidekiq job fails and
|
211
|
+
# Sidekiq can retry the job reporting the original exception
|
212
|
+
# 7. Because the job failed and Sidekiq can be managed by rollbar we'll
|
213
|
+
# report a new exception.
|
214
|
+
# 8. Go to point 2.
|
215
|
+
#
|
216
|
+
# We'll then push to Sidekiq queue indefinitely until the network failure
|
217
|
+
# is fixed.
|
218
|
+
#
|
219
|
+
# Using Rollbar.silenced we avoid the above behavior but Sidekiq
|
220
|
+
# will have a chance to retry the original job.
|
221
|
+
def process_from_async_handler(payload)
|
222
|
+
Rollbar.silenced do
|
223
|
+
begin
|
224
|
+
process_payload(payload)
|
225
|
+
rescue => e
|
226
|
+
report_internal_error(e)
|
227
|
+
|
228
|
+
raise
|
229
|
+
end
|
230
|
+
end
|
202
231
|
end
|
203
232
|
|
204
233
|
def custom_data
|
@@ -544,23 +573,28 @@ module Rollbar
|
|
544
573
|
end
|
545
574
|
|
546
575
|
def send_failsafe(message, exception)
|
576
|
+
body = 'Failsafe from rollbar-gem: '
|
547
577
|
log_error "[Rollbar] Sending failsafe response due to #{message}."
|
578
|
+
|
548
579
|
if exception
|
549
580
|
begin
|
581
|
+
body += "#{exception.class.name}: #{message}"
|
550
582
|
log_error "[Rollbar] #{exception.class.name}: #{exception}"
|
551
|
-
rescue
|
583
|
+
rescue
|
584
|
+
end
|
585
|
+
else
|
586
|
+
begin
|
587
|
+
body += message.to_s
|
588
|
+
rescue
|
552
589
|
end
|
553
590
|
end
|
554
591
|
|
555
|
-
config = configuration
|
556
|
-
environment = config.environment
|
557
|
-
|
558
592
|
failsafe_data = {
|
559
593
|
:level => 'error',
|
560
|
-
:environment => environment.to_s,
|
594
|
+
:environment => configuration.environment.to_s,
|
561
595
|
:body => {
|
562
596
|
:message => {
|
563
|
-
:body =>
|
597
|
+
:body => body
|
564
598
|
}
|
565
599
|
},
|
566
600
|
:notifier => {
|
@@ -581,6 +615,8 @@ module Rollbar
|
|
581
615
|
rescue => e
|
582
616
|
log_error "[Rollbar] Error sending failsafe : #{e}"
|
583
617
|
end
|
618
|
+
|
619
|
+
failsafe_payload
|
584
620
|
end
|
585
621
|
|
586
622
|
def schedule_payload(payload)
|
@@ -3,22 +3,28 @@ module Rollbar
|
|
3
3
|
class GirlFriday
|
4
4
|
|
5
5
|
class << self
|
6
|
-
|
6
|
+
def queue_class
|
7
|
+
::GirlFriday::WorkQueue
|
8
|
+
end
|
7
9
|
|
8
10
|
def call(payload)
|
9
11
|
new.call(payload)
|
10
12
|
end
|
11
|
-
end
|
12
13
|
|
13
|
-
|
14
|
-
|
14
|
+
def queue
|
15
|
+
@queue ||= self.queue_class.new(nil, :size => 5) do |payload|
|
16
|
+
begin
|
17
|
+
Rollbar.process_from_async_handler(payload)
|
18
|
+
rescue
|
19
|
+
# According to https://github.com/mperham/girl_friday/wiki#error-handling
|
20
|
+
# we reraise the exception so it can be handled some way
|
21
|
+
raise
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
15
25
|
end
|
16
26
|
|
17
27
|
def call(payload)
|
18
|
-
self.class.queue = queue_class.new(nil, :size => 5) do |payload|
|
19
|
-
Rollbar.process_payload_safely(payload)
|
20
|
-
end
|
21
|
-
|
22
28
|
self.class.queue.push(payload)
|
23
29
|
end
|
24
30
|
end
|
data/lib/rollbar/delay/resque.rb
CHANGED
@@ -23,7 +23,12 @@ module Rollbar
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def perform(payload)
|
26
|
-
|
26
|
+
begin
|
27
|
+
Rollbar.process_from_async_handler(payload)
|
28
|
+
rescue
|
29
|
+
# Raise the exception so Resque can track the errored job
|
30
|
+
raise
|
31
|
+
end
|
27
32
|
end
|
28
33
|
end
|
29
34
|
end
|
@@ -16,7 +16,13 @@ module Rollbar
|
|
16
16
|
include ::Sidekiq::Worker
|
17
17
|
|
18
18
|
def perform(*args)
|
19
|
-
|
19
|
+
begin
|
20
|
+
Rollbar.process_from_async_handler(*args)
|
21
|
+
rescue
|
22
|
+
# Raise the exception so Sidekiq can track the errored job
|
23
|
+
# and retry it
|
24
|
+
raise
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|
22
28
|
end
|
@@ -11,7 +11,20 @@ module Rollbar
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def perform(*args)
|
14
|
-
|
14
|
+
begin
|
15
|
+
Rollbar.process_from_async_handler(*args)
|
16
|
+
rescue
|
17
|
+
# SuckerPunch can configure an exception handler with:
|
18
|
+
#
|
19
|
+
# SuckerPunch.exception_handler { # do something here }
|
20
|
+
#
|
21
|
+
# This is just passed to Celluloid.exception_handler which will
|
22
|
+
# push the reiceved block to an array of handlers, by default empty, [].
|
23
|
+
#
|
24
|
+
# We reraise the exception here casue it's safe and users could have defined
|
25
|
+
# their own exception handler for SuckerPunch
|
26
|
+
raise
|
27
|
+
end
|
15
28
|
end
|
16
29
|
end
|
17
30
|
end
|
data/lib/rollbar/delay/thread.rb
CHANGED
@@ -6,7 +6,18 @@ module Rollbar
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def call(payload)
|
9
|
-
::Thread.new
|
9
|
+
::Thread.new do
|
10
|
+
begin
|
11
|
+
Rollbar.process_from_async_handler(payload)
|
12
|
+
rescue
|
13
|
+
# Here we swallow the exception:
|
14
|
+
# 1. The original report wasn't sent.
|
15
|
+
# 2. An internal error was sent and logged
|
16
|
+
#
|
17
|
+
# If users want to handle this in some way they
|
18
|
+
# can provide a more custom Thread based implementation
|
19
|
+
end
|
20
|
+
end
|
10
21
|
end
|
11
22
|
end
|
12
23
|
end
|
data/lib/rollbar/version.rb
CHANGED
data/rollbar.gemspec
CHANGED
@@ -4,7 +4,7 @@ require File.expand_path('../lib/rollbar/version', __FILE__)
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Rollbar, Inc."]
|
6
6
|
gem.email = ["support@rollbar.com"]
|
7
|
-
gem.description = %q{
|
7
|
+
gem.description = %q{Easy and powerful exception tracking for Ruby}
|
8
8
|
gem.executables = ['rollbar-rails-runner']
|
9
9
|
gem.summary = %q{Reports exceptions to Rollbar}
|
10
10
|
gem.homepage = "https://rollbar.com"
|
data/spec/delay/sidekiq_spec.rb
CHANGED
@@ -17,7 +17,7 @@ describe Rollbar::Delay::Sidekiq, :if => RUBY_VERSION != '1.8.7' do
|
|
17
17
|
|
18
18
|
describe "#perform" do
|
19
19
|
it "performs payload" do
|
20
|
-
Rollbar.should_receive(:
|
20
|
+
Rollbar.should_receive(:process_from_async_handler).with(payload)
|
21
21
|
subject.perform payload
|
22
22
|
end
|
23
23
|
end
|
@@ -26,7 +26,7 @@ describe Rollbar::Delay::Sidekiq, :if => RUBY_VERSION != '1.8.7' do
|
|
26
26
|
shared_examples "a Rollbar processor" do
|
27
27
|
|
28
28
|
it "processes payload" do
|
29
|
-
Rollbar.should_receive(:
|
29
|
+
Rollbar.should_receive(:process_from_async_handler).with(payload)
|
30
30
|
|
31
31
|
subject.call payload
|
32
32
|
described_class.drain
|
@@ -17,7 +17,7 @@ describe Rollbar::Delay::SuckerPunch, :if => RUBY_VERSION != '1.8.7' do
|
|
17
17
|
let(:payload) { "anything" }
|
18
18
|
|
19
19
|
it "performs the task asynchronously" do
|
20
|
-
Rollbar.should_receive(:
|
20
|
+
Rollbar.should_receive(:process_from_async_handler)
|
21
21
|
|
22
22
|
Rollbar::Delay::SuckerPunch.call payload
|
23
23
|
end
|
@@ -6,14 +6,36 @@ require 'girl_friday'
|
|
6
6
|
require 'rollbar/delay/girl_friday'
|
7
7
|
|
8
8
|
describe Rollbar::Delay::GirlFriday do
|
9
|
+
before do
|
10
|
+
queue_class = ::GirlFriday::WorkQueue.immediate!
|
11
|
+
allow(::Rollbar::Delay::GirlFriday).to receive(:queue_class).and_return(queue_class)
|
12
|
+
end
|
13
|
+
|
9
14
|
describe '.call' do
|
10
15
|
let(:payload) do
|
11
16
|
{ :key => 'value' }
|
12
17
|
end
|
13
18
|
|
14
19
|
it 'push the payload into the queue' do
|
15
|
-
|
20
|
+
expect(Rollbar).to receive(:process_from_async_handler).with(payload)
|
21
|
+
|
16
22
|
described_class.call(payload)
|
17
23
|
end
|
24
|
+
|
25
|
+
context 'with exceptions processing payload' do
|
26
|
+
let(:exception) { Exception.new }
|
27
|
+
|
28
|
+
before do
|
29
|
+
expect(Rollbar).to receive(:process_from_async_handler).with(payload).and_raise(exception)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'raises an exception cause we are using immediate queue' do
|
33
|
+
# This will not happen with a norma work queue cause this:
|
34
|
+
# https://github.com/mperham/girl_friday/blob/master/lib/girl_friday/work_queue.rb#L90-L106
|
35
|
+
expect do
|
36
|
+
described_class.call(payload)
|
37
|
+
end.to raise_error(exception)
|
38
|
+
end
|
39
|
+
end
|
18
40
|
end
|
19
41
|
end
|
@@ -7,15 +7,31 @@ describe Rollbar::Delay::Resque do
|
|
7
7
|
{ :key => 'value' }
|
8
8
|
end
|
9
9
|
|
10
|
+
let(:loaded_hash) do
|
11
|
+
Rollbar::JSON.load(Rollbar::JSON.dump(payload))
|
12
|
+
end
|
13
|
+
|
10
14
|
before do
|
11
15
|
allow(Resque).to receive(:inline?).and_return(true)
|
12
16
|
end
|
13
17
|
|
14
18
|
it 'process the payload' do
|
15
|
-
|
16
|
-
|
17
|
-
expect(Rollbar).to receive(:process_payload_safely).with(loaded_hash)
|
19
|
+
expect(Rollbar).to receive(:process_from_async_handler).with(loaded_hash)
|
18
20
|
described_class.call(payload)
|
19
21
|
end
|
22
|
+
|
23
|
+
context 'with exceptions processing payload' do
|
24
|
+
let(:exception) { Exception.new }
|
25
|
+
|
26
|
+
before do
|
27
|
+
expect(Rollbar).to receive(:process_from_async_handler).with(loaded_hash).and_raise(exception)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'raises an exception' do
|
31
|
+
expect do
|
32
|
+
described_class.call(payload)
|
33
|
+
end.to raise_error(exception)
|
34
|
+
end
|
35
|
+
end
|
20
36
|
end
|
21
37
|
end
|
@@ -5,10 +5,23 @@ describe Rollbar::Delay::Thread do
|
|
5
5
|
let(:payload) { { :key => 'value' } }
|
6
6
|
|
7
7
|
it 'process the payload in a new thread' do
|
8
|
-
expect(Rollbar).to receive(:
|
8
|
+
expect(Rollbar).to receive(:process_from_async_handler).with(payload)
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
described_class.call(payload).join
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'with exceptions processing payload' do
|
14
|
+
let(:exception) { StandardError.new }
|
15
|
+
|
16
|
+
before do
|
17
|
+
expect(Rollbar).to receive(:process_from_async_handler).with(payload).and_raise(exception)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'doesnt raise any exception' do
|
21
|
+
expect do
|
22
|
+
described_class.call(payload).join
|
23
|
+
end.not_to raise_error(exception)
|
24
|
+
end
|
12
25
|
end
|
13
26
|
end
|
14
27
|
end
|
data/spec/rollbar_spec.rb
CHANGED
@@ -1562,17 +1562,27 @@ describe Rollbar do
|
|
1562
1562
|
end
|
1563
1563
|
|
1564
1564
|
context "send_failsafe" do
|
1565
|
+
let(:exception) { StandardError.new }
|
1566
|
+
|
1565
1567
|
it "should not crash when given a message and exception" do
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
end
|
1568
|
+
sent_payload = notifier.send(:send_failsafe, "test failsafe", exception)
|
1569
|
+
|
1570
|
+
expected_message = 'Failsafe from rollbar-gem: StandardError: test failsafe'
|
1571
|
+
expect(sent_payload['data'][:body][:message][:body]).to be_eql(expected_message)
|
1571
1572
|
end
|
1572
1573
|
|
1573
1574
|
it "should not crash when given all nils" do
|
1574
1575
|
notifier.send(:send_failsafe, nil, nil)
|
1575
1576
|
end
|
1577
|
+
|
1578
|
+
context 'without exception object' do
|
1579
|
+
it 'just sends the given message' do
|
1580
|
+
sent_payload = notifier.send(:send_failsafe, "test failsafe", nil)
|
1581
|
+
|
1582
|
+
expected_message = 'Failsafe from rollbar-gem: test failsafe'
|
1583
|
+
expect(sent_payload['data'][:body][:message][:body]).to be_eql(expected_message)
|
1584
|
+
end
|
1585
|
+
end
|
1576
1586
|
end
|
1577
1587
|
|
1578
1588
|
context 'when reporting internal error with nil context' do
|
@@ -1704,15 +1714,20 @@ describe Rollbar do
|
|
1704
1714
|
end
|
1705
1715
|
end
|
1706
1716
|
|
1707
|
-
describe '.
|
1717
|
+
describe '.process_from_async_handler' do
|
1708
1718
|
context 'with errors' do
|
1709
1719
|
let(:exception) { StandardError.new('the error') }
|
1710
1720
|
|
1711
|
-
it '
|
1721
|
+
it 'raises anything and sends internal error' do
|
1712
1722
|
allow(Rollbar.notifier).to receive(:process_payload).and_raise(exception)
|
1713
1723
|
expect(Rollbar.notifier).to receive(:report_internal_error).with(exception)
|
1714
1724
|
|
1715
|
-
|
1725
|
+
expect do
|
1726
|
+
Rollbar.notifier.process_from_async_handler({})
|
1727
|
+
end.to raise_error(exception)
|
1728
|
+
|
1729
|
+
rollbar_do_not_report = exception.instance_variable_get(:@_rollbar_do_not_report)
|
1730
|
+
expect(rollbar_do_not_report).to be_eql(true)
|
1716
1731
|
end
|
1717
1732
|
end
|
1718
1733
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rollbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rollbar, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -178,7 +178,7 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
-
description:
|
181
|
+
description: Easy and powerful exception tracking for Ruby
|
182
182
|
email:
|
183
183
|
- support@rollbar.com
|
184
184
|
executables:
|