sentry-rails 4.3.3.pre.beta.0 → 4.5.0.pre.beta.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0eb34ee9c167f2366fce7bdacec1876ac5735bc8cce4c587c5d40f353ab1e897
4
- data.tar.gz: 4b652a985aeae4fdf14181b4b3f5a46c7d4b0c4168241aa85efd6cb3f09fd957
3
+ metadata.gz: 9c3cdb9c10e43468118c014b7fbf4f8483f8c10e75befcdb4e728189a6119e86
4
+ data.tar.gz: decf01be9ecab36f40b8a59e58472b0abf1c4996f2fc977d2bbca86e88652edc
5
5
  SHA512:
6
- metadata.gz: 24fb610289426dc62e67447b4c27b7746b4dfca7283a908888ac53afdf572eb0f7071201776ae8dae3a07cde4d07ce487924ebc28639eca496ef590201fd885f
7
- data.tar.gz: 13e584471a08019ececbf409c4e4283aace72e20a18b9b0a7e74f7fdf6ea38a1d027944d92bd8514d959e6d8361c8b6ae3c3a8dc1840e29a2dfa19f8df718480
6
+ metadata.gz: 9a3617903a6ab9a80b76098dd782cc3d938adec4ae5c918d2dd9e9fb4eaa7f8b536186d40fca99f6b1eb821a5b7c36ed7578e3445d24b262c9f9c6af4380b366
7
+ data.tar.gz: 1f91065b07c4f32390730875ddf2332ed545e4b2dfcf659fc9f97409416c203559bcf0543bba93fa1559f32b9c39461ce7a80f54568b94be5cf97fe61d133283
data/.craft.yml CHANGED
@@ -11,9 +11,9 @@ artifactProvider:
11
11
  name: github
12
12
  targets:
13
13
  - name: gem
14
- - name: github
15
- tagPrefix: sentry-rails-v
16
14
  - name: registry
17
15
  type: sdk
18
16
  config:
19
17
  canonical: 'gem:sentry-rails'
18
+ - name: github
19
+ tagPrefix: sentry-rails-v
data/CHANGELOG.md CHANGED
@@ -1,5 +1,46 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ### Bug Fixes
6
+
7
+ - Disable background worker for runner mode [#1448](https://github.com/getsentry/sentry-ruby/pull/1448)
8
+ - Fixes [#1324](https://github.com/getsentry/sentry-ruby/issues/1324)
9
+
10
+ ## 4.4.0
11
+
12
+ ### Features
13
+
14
+ - Make tracing subscribers configurable [#1344](https://github.com/getsentry/sentry-ruby/pull/1344)
15
+
16
+ ```ruby
17
+ # current default:
18
+ # - Sentry::Rails::Tracing::ActionControllerSubscriber
19
+ # - Sentry::Rails::Tracing::ActionViewSubscriber
20
+ # - Sentry::Rails::Tracing::ActiveRecordSubscriber
21
+
22
+ # you can add a new subscriber
23
+ config.rails.tracing_subscribers << MySubscriber
24
+ # or replace the set completely
25
+ config.rails.tracing_subscribers = [MySubscriber]
26
+ ```
27
+
28
+ ### Bug Fixes
29
+
30
+ - Report exceptions from the interceptor middleware for exceptions app [#1379](https://github.com/getsentry/sentry-ruby/pull/1379)
31
+ - Fixes [#1371](https://github.com/getsentry/sentry-ruby/issues/1371)
32
+ - Re-position CaptureExceptions middleware to reduce tracing noise [#1405](https://github.com/getsentry/sentry-ruby/pull/1405)
33
+
34
+ ## 4.3.4
35
+
36
+ - Don't assign Rails.logger if it's not present [#1387](https://github.com/getsentry/sentry-ruby/pull/1387)
37
+ - Fixes [#1386](https://github.com/getsentry/sentry-ruby/issues/1386)
38
+
39
+ ## 4.3.3
40
+
41
+ - Correctly set the SDK's logger in sentry-rails [#1363](https://github.com/getsentry/sentry-ruby/pull/1363)
42
+ - Fixes [#1361](https://github.com/getsentry/sentry-ruby/issues/1361)
43
+
3
44
  ## 4.3.3-beta.0
4
45
 
5
46
  - Minimize sentry-rails' dependency requirement [#1352](https://github.com/getsentry/sentry-ruby/pull/1352)
@@ -12,6 +12,7 @@ module Sentry
12
12
  private
13
13
 
14
14
  def collect_exception(env)
15
+ return nil if env["sentry.already_captured"]
15
16
  super || env["action_dispatch.exception"] || env["sentry.rescued_exception"]
16
17
  end
17
18
 
@@ -30,15 +31,15 @@ module Sentry
30
31
  end
31
32
 
32
33
  def start_transaction(env, scope)
33
- transaction = super
34
+ sentry_trace = env["HTTP_SENTRY_TRACE"]
35
+ options = { name: scope.transaction_name, op: transaction_op }
34
36
 
35
- return unless transaction
36
-
37
- if @assets_regex && transaction.name.match?(@assets_regex)
38
- transaction.instance_variable_set(:@sampled, false)
37
+ if @assets_regex && scope.transaction_name.match?(@assets_regex)
38
+ options.merge!(sampled: false)
39
39
  end
40
40
 
41
- transaction
41
+ transaction = Sentry::Transaction.from_sentry_trace(sentry_trace, **options) if sentry_trace
42
+ Sentry.start_transaction(transaction: transaction, **options)
42
43
  end
43
44
  end
44
45
  end
@@ -1,3 +1,7 @@
1
+ require "sentry/rails/tracing/action_controller_subscriber"
2
+ require "sentry/rails/tracing/action_view_subscriber"
3
+ require "sentry/rails/tracing/active_record_subscriber"
4
+
1
5
  module Sentry
2
6
  class Configuration
3
7
  attr_reader :rails
@@ -5,6 +9,17 @@ module Sentry
5
9
  add_post_initialization_callback do
6
10
  @rails = Sentry::Rails::Configuration.new
7
11
  @excluded_exceptions = @excluded_exceptions.concat(Sentry::Rails::IGNORE_DEFAULT)
12
+
13
+ if ::Rails.logger
14
+ @logger = ::Rails.logger
15
+ else
16
+ @logger.warn(Sentry::LOGGER_PROGNAME) do
17
+ <<~MSG
18
+ sentry-rails can't detect Rails.logger. it may be caused by misplacement of the SDK initialization code
19
+ please make sure you place the Sentry.init block under the `config/initializers` folder, e.g. `config/initializers/sentry.rb`
20
+ MSG
21
+ end
22
+ end
8
23
  end
9
24
  end
10
25
 
@@ -36,10 +51,16 @@ module Sentry
36
51
  # In those cases, we should skip ActiveJob's reporting to avoid duplicated reports.
37
52
  attr_accessor :skippable_job_adapters
38
53
 
54
+ attr_accessor :tracing_subscribers
55
+
39
56
  def initialize
40
57
  @report_rescued_exceptions = true
41
- # TODO: Remove this in 4.2.0
42
58
  @skippable_job_adapters = []
59
+ @tracing_subscribers = Set.new([
60
+ Sentry::Rails::Tracing::ActionControllerSubscriber,
61
+ Sentry::Rails::Tracing::ActionViewSubscriber,
62
+ Sentry::Rails::Tracing::ActiveRecordSubscriber
63
+ ])
43
64
  end
44
65
  end
45
66
  end
@@ -6,8 +6,8 @@ module Sentry
6
6
  class Railtie < ::Rails::Railtie
7
7
  # middlewares can't be injected after initialize
8
8
  initializer "sentry.use_rack_middleware" do |app|
9
- # need to be placed at first to capture as many errors as possible
10
- app.config.middleware.insert 0, Sentry::Rails::CaptureExceptions
9
+ # placed after all the file-sending middlewares so we can avoid unnecessary transactions
10
+ app.config.middleware.insert_after ActionDispatch::Executor, Sentry::Rails::CaptureExceptions
11
11
  # need to be placed at last to smuggle app exceptions via env
12
12
  app.config.middleware.use(Sentry::Rails::RescuedExceptionInterceptor)
13
13
  end
@@ -16,24 +16,23 @@ module Sentry
16
16
  next unless Sentry.initialized?
17
17
 
18
18
  configure_project_root
19
- configure_sentry_logger
20
19
  configure_trusted_proxies
21
20
  extend_controller_methods if defined?(ActionController)
22
21
  extend_active_job if defined?(ActiveJob)
23
22
  patch_background_worker if defined?(ActiveRecord)
24
23
  override_streaming_reporter if defined?(ActionView)
25
- override_file_handler if defined?(ActionDispatch) && app.config.public_file_server.enabled
26
24
  setup_backtrace_cleanup_callback
27
25
  inject_breadcrumbs_logger
28
26
  activate_tracing
29
27
  end
30
28
 
31
- def configure_project_root
32
- Sentry.configuration.project_root = ::Rails.root.to_s
29
+ runner do
30
+ next unless Sentry.initialized?
31
+ Sentry.configuration.background_worker_threads = 0
33
32
  end
34
33
 
35
- def configure_sentry_logger
36
- Sentry.configuration.logger = ::Rails.logger
34
+ def configure_project_root
35
+ Sentry.configuration.project_root = ::Rails.root.to_s
37
36
  end
38
37
 
39
38
  def configure_trusted_proxies
@@ -84,16 +83,10 @@ module Sentry
84
83
  end
85
84
  end
86
85
 
87
- def override_file_handler
88
- require "sentry/rails/overrides/file_handler"
89
-
90
- ActiveSupport.on_load :action_controller do
91
- ActionDispatch::FileHandler.send(:prepend, Sentry::Rails::Overrides::FileHandler)
92
- end
93
- end
94
-
95
86
  def activate_tracing
96
87
  if Sentry.configuration.tracing_enabled?
88
+ subscribers = Sentry.configuration.rails.tracing_subscribers
89
+ Sentry::Rails::Tracing.register_subscribers(subscribers)
97
90
  Sentry::Rails::Tracing.subscribe_tracing_events
98
91
  Sentry::Rails::Tracing.patch_active_support_notifications
99
92
  end
@@ -20,12 +20,21 @@ module Sentry
20
20
  copied_env = scope.rack_env.dup
21
21
  copied_env["sentry.original_transaction"] = scope.transaction_name
22
22
  scope.set_rack_env(copied_env)
23
+
24
+ if report_rescued_exceptions?
25
+ Sentry::Rails.capture_exception(e)
26
+ env["sentry.already_captured"] = true
27
+ end
23
28
  end
24
29
 
25
- env["sentry.rescued_exception"] = e if Sentry.configuration.rails.report_rescued_exceptions
30
+ env["sentry.rescued_exception"] = e if report_rescued_exceptions?
26
31
  raise e
27
32
  end
28
33
  end
34
+
35
+ def report_rescued_exceptions?
36
+ Sentry.configuration.rails.report_rescued_exceptions
37
+ end
29
38
  end
30
39
  end
31
40
  end
@@ -1,18 +1,19 @@
1
- require "sentry/rails/tracing/abstract_subscriber"
2
- require "sentry/rails/tracing/active_record_subscriber"
3
- require "sentry/rails/tracing/action_controller_subscriber"
4
- require "sentry/rails/tracing/action_view_subscriber"
5
-
6
1
  module Sentry
7
2
  module Rails
8
3
  module Tracing
9
- AVAILABLE_SUBSCRIBERS = [ActionViewSubscriber, ActiveRecordSubscriber, ActionControllerSubscriber]
4
+ def self.register_subscribers(subscribers)
5
+ @subscribers = subscribers
6
+ end
7
+
8
+ def self.subscribers
9
+ @subscribers
10
+ end
10
11
 
11
12
  def self.subscribe_tracing_events
12
13
  # need to avoid duplicated subscription
13
14
  return if @subscribed
14
15
 
15
- AVAILABLE_SUBSCRIBERS.each(&:subscribe!)
16
+ subscribers.each(&:subscribe!)
16
17
 
17
18
  @subscribed = true
18
19
  end
@@ -20,7 +21,7 @@ module Sentry
20
21
  def self.unsubscribe_tracing_events
21
22
  return unless @subscribed
22
23
 
23
- AVAILABLE_SUBSCRIBERS.each(&:unsubscribe!)
24
+ subscribers.each(&:unsubscribe!)
24
25
 
25
26
  @subscribed = false
26
27
  end
@@ -1,3 +1,5 @@
1
+ require "sentry/rails/tracing/abstract_subscriber"
2
+
1
3
  module Sentry
2
4
  module Rails
3
5
  module Tracing
@@ -1,3 +1,5 @@
1
+ require "sentry/rails/tracing/abstract_subscriber"
2
+
1
3
  module Sentry
2
4
  module Rails
3
5
  module Tracing
@@ -1,3 +1,5 @@
1
+ require "sentry/rails/tracing/abstract_subscriber"
2
+
1
3
  module Sentry
2
4
  module Rails
3
5
  module Tracing
@@ -1,5 +1,5 @@
1
1
  module Sentry
2
2
  module Rails
3
- VERSION = "4.3.3-beta.0"
3
+ VERSION = "4.5.0-beta.1"
4
4
  end
5
5
  end
data/sentry-rails.gemspec CHANGED
@@ -23,5 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.require_paths = ["lib"]
24
24
 
25
25
  spec.add_dependency "railties", ">= 5.0"
26
- spec.add_dependency "sentry-ruby-core", "~> 4.3.0"
26
+ spec.add_dependency "sentry-ruby-core", "~> 4.5.0-beta.1"
27
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.3.pre.beta.0
4
+ version: 4.5.0.pre.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sentry Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-25 00:00:00.000000000 Z
11
+ date: 2021-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 4.3.0
33
+ version: 4.5.0.pre.beta.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 4.3.0
40
+ version: 4.5.0.pre.beta.1
41
41
  description: A gem that provides Rails integration for the Sentry error logger
42
42
  email: accounts@sentry.io
43
43
  executables: []
@@ -70,7 +70,6 @@ files:
70
70
  - lib/sentry/rails/controller_methods.rb
71
71
  - lib/sentry/rails/controller_transaction.rb
72
72
  - lib/sentry/rails/engine.rb
73
- - lib/sentry/rails/overrides/file_handler.rb
74
73
  - lib/sentry/rails/overrides/streaming_reporter.rb
75
74
  - lib/sentry/rails/railtie.rb
76
75
  - lib/sentry/rails/rescued_exception_interceptor.rb
@@ -103,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
102
  - !ruby/object:Gem::Version
104
103
  version: 1.3.1
105
104
  requirements: []
106
- rubygems_version: 3.0.3
105
+ rubygems_version: 3.1.6
107
106
  signing_key:
108
107
  specification_version: 4
109
108
  summary: A gem that provides Rails integration for the Sentry error logger
@@ -1,16 +0,0 @@
1
- module Sentry
2
- module Rails
3
- module Overrides
4
- module FileHandler
5
- def serve(*args)
6
- if Sentry.initialized? && current_transaction = Sentry.get_current_scope.span
7
- # we don't want to expose a setter for @sampled just for this case
8
- current_transaction.instance_variable_set(:@sampled, false)
9
- end
10
-
11
- super
12
- end
13
- end
14
- end
15
- end
16
- end