diff --git a/sentry-rails/.gitignore b/sentry-rails/.gitignore index e8acda211..27b24b079 100644 --- a/sentry-rails/.gitignore +++ b/sentry-rails/.gitignore @@ -5,7 +5,7 @@ /doc/ /pkg/ /spec/reports/ -/spec/dummy/test_rails_app/db* +/spec/dummy/test_rails_app/**/*.sqlite3* /tmp/ # rspec failure tracking diff --git a/sentry-rails/Gemfile b/sentry-rails/Gemfile index 2e1571835..77a5142c4 100644 --- a/sentry-rails/Gemfile +++ b/sentry-rails/Gemfile @@ -32,13 +32,16 @@ gem "rails", "~> #{rails_version}" if rails_version >= Gem::Version.new("8.1.0") gem "rspec-rails", "~> 8.0.0" + gem "solid_queue" gem "sqlite3", "~> 2.1.1", platform: :ruby elsif rails_version >= Gem::Version.new("8.0.0") gem "rspec-rails", "~> 8.0.0" + gem "solid_queue" gem "sqlite3", "~> 2.1.1", platform: :ruby elsif rails_version >= Gem::Version.new("7.1.0") gem "psych", "~> 4.0.0" gem "rspec-rails", "~> 7.0" + gem "solid_queue" gem "sqlite3", "~> 1.7.3", platform: :ruby elsif rails_version >= Gem::Version.new("6.1.0") gem "rspec-rails", "~> 6.0" diff --git a/sentry-rails/gemfiles/ruby-2.7_rails-7.1.0.gemfile.lock b/sentry-rails/gemfiles/ruby-2.7_rails-7.1.0.gemfile.lock index 182863f57..31cebb22d 100644 --- a/sentry-rails/gemfiles/ruby-2.7_rails-7.1.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-2.7_rails-7.1.0.gemfile.lock @@ -133,6 +133,11 @@ GEM erb (4.0.4.1) cgi (>= 0.3.3) erubi (1.13.1) + et-orbi (1.4.0) + tzinfo + fugit (1.11.2) + et-orbi (~> 1, >= 1.2.11) + raabro (~> 1.4) globalid (1.4.0) activesupport (>= 6.1) i18n (1.14.8) @@ -188,6 +193,7 @@ GEM prism (1.9.0) psych (4.0.6) stringio + raabro (1.4.0) racc (1.8.1) rack (3.2.6) rack-session (2.1.2) @@ -313,6 +319,13 @@ GEM simplecov (~> 0.19) simplecov-html (0.13.2) simplecov_json_formatter (0.1.4) + solid_queue (1.1.2) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11.0) + railties (>= 7.1) + thor (~> 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -324,7 +337,7 @@ GEM sqlite3 (1.7.3) mini_portile2 (~> 2.8.0) stringio (3.2.0) - thor (1.5.0) + thor (1.3.2) timeout (0.6.1) tsort (0.2.0) tzinfo (2.0.6) @@ -370,6 +383,7 @@ DEPENDENCIES sidekiq (~> 7.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) diff --git a/sentry-rails/gemfiles/ruby-3.0_rails-7.1.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.0_rails-7.1.0.gemfile.lock index 7110b3900..0f09c8f71 100644 --- a/sentry-rails/gemfiles/ruby-3.0_rails-7.1.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.0_rails-7.1.0.gemfile.lock @@ -371,6 +371,8 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (0.2.2) + rails (~> 7.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -441,6 +443,7 @@ DEPENDENCIES sidekiq (~> 7.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) diff --git a/sentry-rails/gemfiles/ruby-3.1_rails-7.1.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.1_rails-7.1.0.gemfile.lock index 310730fa7..f40769375 100644 --- a/sentry-rails/gemfiles/ruby-3.1_rails-7.1.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.1_rails-7.1.0.gemfile.lock @@ -376,6 +376,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -449,6 +456,7 @@ DEPENDENCIES sidekiq (~> 7.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) diff --git a/sentry-rails/gemfiles/ruby-3.1_rails-7.2.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.1_rails-7.2.0.gemfile.lock index 9e340187d..91379ce06 100644 --- a/sentry-rails/gemfiles/ruby-3.1_rails-7.2.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.1_rails-7.2.0.gemfile.lock @@ -369,6 +369,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -443,6 +450,7 @@ DEPENDENCIES sidekiq (~> 7.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) diff --git a/sentry-rails/gemfiles/ruby-3.2_rails-7.1.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.2_rails-7.1.0.gemfile.lock index 957558458..1e983b4c3 100644 --- a/sentry-rails/gemfiles/ruby-3.2_rails-7.1.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.2_rails-7.1.0.gemfile.lock @@ -379,6 +379,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -452,6 +459,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) @@ -581,6 +589,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (1.7.3-aarch64-linux) sha256=0ccb8c001cd2617f4801a2c816142d3c9bc299e3f3e0f49e03812f3610b0891c diff --git a/sentry-rails/gemfiles/ruby-3.2_rails-7.2.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.2_rails-7.2.0.gemfile.lock index cfc3c28f9..5e1203295 100644 --- a/sentry-rails/gemfiles/ruby-3.2_rails-7.2.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.2_rails-7.2.0.gemfile.lock @@ -370,6 +370,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -444,6 +451,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) @@ -572,6 +580,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (1.7.3-aarch64-linux) sha256=0ccb8c001cd2617f4801a2c816142d3c9bc299e3f3e0f49e03812f3610b0891c diff --git a/sentry-rails/gemfiles/ruby-3.2_rails-8.0.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.2_rails-8.0.0.gemfile.lock index bcacb415e..2848044d6 100644 --- a/sentry-rails/gemfiles/ruby-3.2_rails-8.0.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.2_rails-8.0.0.gemfile.lock @@ -367,6 +367,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -441,6 +448,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 2.1.1) @@ -568,6 +576,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (2.1.1-aarch64-linux-gnu) sha256=8e66a55e17ab5251d8a3e86c95fa79676d7b6f9657f5a2bade6604d69e15fc6f diff --git a/sentry-rails/gemfiles/ruby-3.3_rails-7.1.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.3_rails-7.1.0.gemfile.lock index 933d88006..18a654822 100644 --- a/sentry-rails/gemfiles/ruby-3.3_rails-7.1.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.3_rails-7.1.0.gemfile.lock @@ -379,6 +379,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -452,6 +459,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) @@ -581,6 +589,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (1.7.3-aarch64-linux) sha256=0ccb8c001cd2617f4801a2c816142d3c9bc299e3f3e0f49e03812f3610b0891c diff --git a/sentry-rails/gemfiles/ruby-3.3_rails-7.2.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.3_rails-7.2.0.gemfile.lock index 24e1c650b..8f45cbe30 100644 --- a/sentry-rails/gemfiles/ruby-3.3_rails-7.2.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.3_rails-7.2.0.gemfile.lock @@ -370,6 +370,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -444,6 +451,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) @@ -572,6 +580,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (1.7.3-aarch64-linux) sha256=0ccb8c001cd2617f4801a2c816142d3c9bc299e3f3e0f49e03812f3610b0891c diff --git a/sentry-rails/gemfiles/ruby-3.3_rails-8.0.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.3_rails-8.0.0.gemfile.lock index ec55f722c..e89c907fc 100644 --- a/sentry-rails/gemfiles/ruby-3.3_rails-8.0.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.3_rails-8.0.0.gemfile.lock @@ -367,6 +367,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -441,6 +448,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 2.1.1) @@ -568,6 +576,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (2.1.1-aarch64-linux-gnu) sha256=8e66a55e17ab5251d8a3e86c95fa79676d7b6f9657f5a2bade6604d69e15fc6f diff --git a/sentry-rails/gemfiles/ruby-3.4_rails-7.1.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.4_rails-7.1.0.gemfile.lock index e28003325..efe3019ca 100644 --- a/sentry-rails/gemfiles/ruby-3.4_rails-7.1.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.4_rails-7.1.0.gemfile.lock @@ -372,6 +372,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -440,6 +447,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) @@ -566,6 +574,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (1.7.3) sha256=fa77f63c709548f46d4e9b6bb45cda52aa3881aa12cc85991132758e8968701c diff --git a/sentry-rails/gemfiles/ruby-3.4_rails-7.2.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.4_rails-7.2.0.gemfile.lock index 946493a65..3aeefa775 100644 --- a/sentry-rails/gemfiles/ruby-3.4_rails-7.2.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.4_rails-7.2.0.gemfile.lock @@ -364,6 +364,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -433,6 +440,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) @@ -559,6 +567,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (1.7.3) sha256=fa77f63c709548f46d4e9b6bb45cda52aa3881aa12cc85991132758e8968701c diff --git a/sentry-rails/gemfiles/ruby-3.4_rails-8.0.0.gemfile.lock b/sentry-rails/gemfiles/ruby-3.4_rails-8.0.0.gemfile.lock index 2d46d2bbb..fd12a0ec4 100644 --- a/sentry-rails/gemfiles/ruby-3.4_rails-8.0.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.4_rails-8.0.0.gemfile.lock @@ -361,6 +361,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -429,6 +436,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 2.1.1) @@ -554,6 +562,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (2.1.1) sha256=08ef9a277f25665bf237f16f7c68ec22b79100d1abe256e566a5e23337a62cf6 diff --git a/sentry-rails/gemfiles/ruby-3.4_rails-8.1.3.gemfile.lock b/sentry-rails/gemfiles/ruby-3.4_rails-8.1.3.gemfile.lock index a0b5ccd03..d221ea9d8 100644 --- a/sentry-rails/gemfiles/ruby-3.4_rails-8.1.3.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-3.4_rails-8.1.3.gemfile.lock @@ -364,6 +364,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -432,6 +439,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 2.1.1) @@ -558,6 +566,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (2.1.1) sha256=08ef9a277f25665bf237f16f7c68ec22b79100d1abe256e566a5e23337a62cf6 diff --git a/sentry-rails/gemfiles/ruby-4.0_rails-7.1.0.gemfile.lock b/sentry-rails/gemfiles/ruby-4.0_rails-7.1.0.gemfile.lock index d45fd7a7c..536b20fdb 100644 --- a/sentry-rails/gemfiles/ruby-4.0_rails-7.1.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-4.0_rails-7.1.0.gemfile.lock @@ -372,6 +372,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -440,6 +447,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) @@ -566,6 +574,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (1.7.3) sha256=fa77f63c709548f46d4e9b6bb45cda52aa3881aa12cc85991132758e8968701c diff --git a/sentry-rails/gemfiles/ruby-4.0_rails-8.0.0.gemfile.lock b/sentry-rails/gemfiles/ruby-4.0_rails-8.0.0.gemfile.lock index 1f1d012d5..d332497f7 100644 --- a/sentry-rails/gemfiles/ruby-4.0_rails-8.0.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-4.0_rails-8.0.0.gemfile.lock @@ -361,6 +361,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -429,6 +436,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 2.1.1) @@ -554,6 +562,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (2.1.1) sha256=08ef9a277f25665bf237f16f7c68ec22b79100d1abe256e566a5e23337a62cf6 diff --git a/sentry-rails/gemfiles/ruby-4.0_rails-8.1.3.gemfile.lock b/sentry-rails/gemfiles/ruby-4.0_rails-8.1.3.gemfile.lock index 90af5823c..65a297d8e 100644 --- a/sentry-rails/gemfiles/ruby-4.0_rails-8.1.3.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-4.0_rails-8.1.3.gemfile.lock @@ -364,6 +364,13 @@ GEM rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -432,6 +439,7 @@ DEPENDENCIES sidekiq (~> 8.0) simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 2.1.1) @@ -558,6 +566,7 @@ CHECKSUMS simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sqlite3 (2.1.1) sha256=08ef9a277f25665bf237f16f7c68ec22b79100d1abe256e566a5e23337a62cf6 diff --git a/sentry-rails/gemfiles/ruby-jruby-9.4.14.0_rails-7.1.0.gemfile.lock b/sentry-rails/gemfiles/ruby-jruby-9.4.14.0_rails-7.1.0.gemfile.lock index 5240e1a41..4db74eecb 100644 --- a/sentry-rails/gemfiles/ruby-jruby-9.4.14.0_rails-7.1.0.gemfile.lock +++ b/sentry-rails/gemfiles/ruby-jruby-9.4.14.0_rails-7.1.0.gemfile.lock @@ -128,6 +128,11 @@ GEM erb (4.0.4.1-java) cgi (>= 0.3.3) erubi (1.13.1) + et-orbi (1.4.0) + tzinfo + fugit (1.12.2) + et-orbi (~> 1.4) + raabro (~> 1.4) globalid (1.4.0) activesupport (>= 6.1) i18n (1.15.2) @@ -183,6 +188,7 @@ GEM prism (1.9.0) psych (4.0.6-java) jar-dependencies (>= 0.1.7) + raabro (1.4.0) racc (1.8.1-java) rack (3.2.6) rack-session (2.1.2) @@ -300,6 +306,13 @@ GEM simplecov (~> 0.19) simplecov-html (0.13.2) simplecov_json_formatter (0.1.4) + solid_queue (1.4.0) + activejob (>= 7.1) + activerecord (>= 7.1) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11) + railties (>= 7.1) + thor (>= 1.3.1) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -351,6 +364,7 @@ DEPENDENCIES sequel simplecov simplecov-cobertura (~> 3.0) + solid_queue sprockets-rails sqlite3 (~> 1.7.3) diff --git a/sentry-rails/spec/active_job/solid_queue_spec.rb b/sentry-rails/spec/active_job/solid_queue_spec.rb new file mode 100644 index 000000000..4dc0de457 --- /dev/null +++ b/sentry-rails/spec/active_job/solid_queue_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +require "spec_helper" + +if RAILS_VERSION >= 7.1 && RUBY_VERSION >= "3.1" + require "solid_queue" + + RSpec.describe "Sentry + ActiveJob on SolidQueue", type: :job do + include ActiveSupport::Testing::TimeHelpers + include_context "active_job backend harness", adapter: :solid_queue + + # Instantiated once. Each SolidQueueAdapter.new registers a + # SolidQueue.on_worker_stop callback at class-load time (mutating + # global SolidQueue state), so creating a fresh adapter per example + # would accumulate callbacks across the run. + SOLID_QUEUE_ADAPTER_FOR_TEST = ::ActiveJob::QueueAdapters::SolidQueueAdapter.new + + def queue_adapter_for_test + SOLID_QUEUE_ADAPTER_FOR_TEST + end + + def boot_adapter(_adapter) + Sentry::Rails::Test::Application.load_queue_schema + end + + def reset_adapter(_adapter) + [ + SolidQueue::ReadyExecution, + SolidQueue::ClaimedExecution, + SolidQueue::FailedExecution, + SolidQueue::BlockedExecution, + SolidQueue::ScheduledExecution, + SolidQueue::RecurringExecution, + SolidQueue::Process, + SolidQueue::Job + ].each(&:delete_all) + end + + def drain(at: nil) + process = SolidQueue::Process.register( + kind: "Worker", + pid: ::Process.pid, + name: "spec-#{SecureRandom.hex(4)}" + ) + + # Loop until both ready and scheduled tables are empty so that + # retry_on cascades cleanly: a failing perform pushes the job into + # SolidQueue::ScheduledExecution (via enqueue_at), which the next + # iteration promotes to ReadyExecution and claims for execution. + # A single dispatch+claim pass would only observe the first + # attempt. + run = lambda do + loop do + SolidQueue::ScheduledExecution.dispatch_next_batch(100) + ready = SolidQueue::ReadyExecution.claim("*", 100, process.id) + break if ready.empty? && SolidQueue::ScheduledExecution.none? + ready.each(&:perform) + end + end + + # Only wrap in travel_to when the caller explicitly asks for a future + # time — otherwise nested travel_to (e.g. from a spec that already + # called `travel`) raises. + at ? travel_to(at, &run) : run.call + end + + def last_enqueued_payload + SolidQueue::Job.order(:id).last&.arguments + end + + it_behaves_like "a Sentry-instrumented ActiveJob backend" + it_behaves_like "an ActiveJob backend that supports distributed tracing" + end +end diff --git a/sentry-rails/spec/dummy/test_rails_app/config/application.rb b/sentry-rails/spec/dummy/test_rails_app/config/application.rb index 25f34bc18..a1b68eeda 100644 --- a/sentry-rails/spec/dummy/test_rails_app/config/application.rb +++ b/sentry-rails/spec/dummy/test_rails_app/config/application.rb @@ -45,6 +45,10 @@ def self.schema_file @schema_file ||= root_path.join("db/schema.rb") end + def self.queue_schema_file + @queue_schema_file ||= root_path.join("db/queue_schema.rb") + end + def self.db_path @db_path ||= root_path.join("db", "db.sqlite3") end @@ -77,6 +81,14 @@ def self.load_test_schema end end + def self.load_queue_schema + @__queue_schema_loaded__ ||= begin + load_test_schema + require Test::Application.queue_schema_file + true + end + end + # Configure method that sets up base configuration # This can be inherited and extended by subclasses def configure diff --git a/sentry-rails/spec/dummy/test_rails_app/db/queue_schema.rb b/sentry-rails/spec/dummy/test_rails_app/db/queue_schema.rb new file mode 100644 index 000000000..0c9e37bfa --- /dev/null +++ b/sentry-rails/spec/dummy/test_rails_app/db/queue_schema.rb @@ -0,0 +1,131 @@ +# frozen_string_literal: true + +ActiveRecord::Schema[7.1].define(version: 1) do + create_table "solid_queue_blocked_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.string "queue_name", null: false + t.integer "priority", default: 0, null: false + t.string "concurrency_key", null: false + t.datetime "expires_at", null: false + t.datetime "created_at", null: false + t.index [ "concurrency_key", "priority", "job_id" ], name: "index_solid_queue_blocked_executions_for_release" + t.index [ "expires_at", "concurrency_key" ], name: "index_solid_queue_blocked_executions_for_maintenance" + t.index [ "job_id" ], name: "index_solid_queue_blocked_executions_on_job_id", unique: true + end + + create_table "solid_queue_claimed_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.bigint "process_id" + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_claimed_executions_on_job_id", unique: true + t.index [ "process_id", "job_id" ], name: "index_solid_queue_claimed_executions_on_process_id_and_job_id" + end + + create_table "solid_queue_failed_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.text "error" + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_failed_executions_on_job_id", unique: true + end + + create_table "solid_queue_jobs", force: :cascade do |t| + t.string "queue_name", null: false + t.string "class_name", null: false + t.text "arguments" + t.integer "priority", default: 0, null: false + t.string "active_job_id" + t.datetime "scheduled_at" + t.datetime "finished_at" + t.string "concurrency_key" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index [ "active_job_id" ], name: "index_solid_queue_jobs_on_active_job_id" + t.index [ "class_name" ], name: "index_solid_queue_jobs_on_class_name" + t.index [ "finished_at" ], name: "index_solid_queue_jobs_on_finished_at" + t.index [ "queue_name", "finished_at" ], name: "index_solid_queue_jobs_for_filtering" + t.index [ "scheduled_at", "finished_at" ], name: "index_solid_queue_jobs_for_alerting" + end + + create_table "solid_queue_pauses", force: :cascade do |t| + t.string "queue_name", null: false + t.datetime "created_at", null: false + t.index [ "queue_name" ], name: "index_solid_queue_pauses_on_queue_name", unique: true + end + + create_table "solid_queue_processes", force: :cascade do |t| + t.string "kind", null: false + t.datetime "last_heartbeat_at", null: false + t.bigint "supervisor_id" + t.integer "pid", null: false + t.string "hostname" + t.text "metadata" + t.datetime "created_at", null: false + t.string "name", null: false + t.index [ "last_heartbeat_at" ], name: "index_solid_queue_processes_on_last_heartbeat_at" + t.index [ "name", "supervisor_id" ], name: "index_solid_queue_processes_on_name_and_supervisor_id", unique: true + t.index [ "supervisor_id" ], name: "index_solid_queue_processes_on_supervisor_id" + end + + create_table "solid_queue_ready_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.string "queue_name", null: false + t.integer "priority", default: 0, null: false + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_ready_executions_on_job_id", unique: true + t.index [ "priority", "job_id" ], name: "index_solid_queue_poll_all" + t.index [ "queue_name", "priority", "job_id" ], name: "index_solid_queue_poll_by_queue" + end + + create_table "solid_queue_recurring_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.string "task_key", null: false + t.datetime "run_at", null: false + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_recurring_executions_on_job_id", unique: true + t.index [ "task_key", "run_at" ], name: "index_solid_queue_recurring_executions_on_task_key_and_run_at", unique: true + end + + create_table "solid_queue_recurring_tasks", force: :cascade do |t| + t.string "key", null: false + t.string "schedule", null: false + t.string "command", limit: 2048 + t.string "class_name" + t.text "arguments" + t.string "queue_name" + t.integer "priority", default: 0 + t.boolean "static", default: true, null: false + t.text "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index [ "key" ], name: "index_solid_queue_recurring_tasks_on_key", unique: true + t.index [ "static" ], name: "index_solid_queue_recurring_tasks_on_static" + end + + create_table "solid_queue_scheduled_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.string "queue_name", null: false + t.integer "priority", default: 0, null: false + t.datetime "scheduled_at", null: false + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_scheduled_executions_on_job_id", unique: true + t.index [ "scheduled_at", "priority", "job_id" ], name: "index_solid_queue_dispatch_all" + end + + create_table "solid_queue_semaphores", force: :cascade do |t| + t.string "key", null: false + t.integer "value", default: 1, null: false + t.datetime "expires_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index [ "expires_at" ], name: "index_solid_queue_semaphores_on_expires_at" + t.index [ "key", "value" ], name: "index_solid_queue_semaphores_on_key_and_value" + t.index [ "key" ], name: "index_solid_queue_semaphores_on_key", unique: true + end + + add_foreign_key "solid_queue_blocked_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_claimed_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_failed_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_ready_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_recurring_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_scheduled_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade +end