activerecord-debug_errors 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 818e63536312d27e39718e58eb6ec33827cd703e245f284c806e53d4dfcc86dc
4
- data.tar.gz: b177c2624722f1a5bd01f5378c252c6344d134679704f2e816ccbf2b184732f7
3
+ metadata.gz: e5e73679ce896b569f923bc47533917baeaed89312248d578e72ac18187ac0d7
4
+ data.tar.gz: 5374c129a058bdb852b294649d14065f8c61de94527335ececbaf17ec9423a5d
5
5
  SHA512:
6
- metadata.gz: 2198d3f0a7a61a1d71f1c171c8fa9aaa1a4a7f650ae40fb69c39bf95f37ed83aa3d0c125b2beaa2032cac1a7ec05938607448b3266a399e79bd774476dd69610
7
- data.tar.gz: d6a9a8df96bff2a512468e3c56ce07099a2eee6818a9adef13422d832bb1b22cb2dadc0450b960f0ed244d6d21223453e3fd957fac67816fc4c0ba1770de0943
6
+ metadata.gz: 23fa53f6de23fc3310235626e16e2f883abbae22ef12db578aa572c0e29b7b13352cc97ef0ae5275b5c8a456b8b33533ee86694a3aba3b02498ada252ad18cc7
7
+ data.tar.gz: 49e1c9ed26875868ab6b834104a29d383eab2cccfabd9e053c3cd4ffbfdede095f430d3d2fb2fd4a9c5fa3b9153f40f30d9773f2333842a8f79a9bb83066492d
@@ -15,6 +15,22 @@ jobs:
15
15
  ruby-version:
16
16
  - '2.6'
17
17
  - '2.7'
18
+ - '3.0'
19
+ - '3.1'
20
+ - '3.2'
21
+ - '3.3'
22
+ activerecord-version:
23
+ - '6_0'
24
+ - '6_1'
25
+ - '7_0'
26
+ - '7_1'
27
+ exclude:
28
+ # activerecord-7 doesn't support Ruby 2.6
29
+ - ruby-version: '2.6'
30
+ activerecord-version: '7_0'
31
+ - ruby-version: '2.6'
32
+ activerecord-version: '7_1'
33
+
18
34
  services:
19
35
  mysql:
20
36
  image: mysql:5.7
@@ -28,18 +44,17 @@ jobs:
28
44
  env:
29
45
  MYSQL_ROOT_PASSWORD: password
30
46
  MYSQL_DATABASE: test
47
+
48
+ env:
49
+ BUNDLE_GEMFILE: gemfiles/activerecord_${{ matrix.activerecord-version }}.gemfile
50
+
31
51
  steps:
32
- - uses: actions/checkout@v2
52
+ - uses: actions/checkout@v4
33
53
  - name: Set up Ruby ${{ matrix.ruby-version }}
34
- uses: actions/setup-ruby@v1
54
+ uses: ruby/setup-ruby@v1
35
55
  with:
36
56
  ruby-version: ${{ matrix.ruby-version }}
37
- - uses: actions/cache@v2
38
- with:
39
- path: vendor/bundle
40
- key: ${{ runner.os }}-gems-${{ matrix.ruby-version }}-${{ hashFiles('activerecord-debug_errors.gemspec', '**/Gemfile') }}
41
- restore-keys: |
42
- ${{ runner.os }}-gems-${{ matrix.ruby-version }}-
57
+ bundler-cache: true
43
58
  - name: Build and test with Rake
44
59
  run: |
45
60
  bundle config path vendor/bundle
data/.gitignore CHANGED
@@ -7,5 +7,7 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
 
10
+ Gemfile.lock
11
+
10
12
  # rspec failure tracking
11
13
  .rspec_status
data/Gemfile CHANGED
@@ -3,5 +3,6 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in activerecord-debug_errors.gemspec
4
4
  gemspec
5
5
 
6
+ gem "mysql2"
6
7
  gem "rake", "~> 12.0"
7
8
  gem "rspec", "~> 3.0"
data/README.md CHANGED
@@ -118,12 +118,14 @@ Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
118
118
  *** WE ROLL BACK TRANSACTION (2)
119
119
  ```
120
120
 
121
+ Note that the user requires the PROCESS priviledge to collect the information.
122
+
121
123
  ### ActiveRecord::ConnectionTimeoutError
122
124
 
123
125
  When `ActiveRecord::ConnectionTimeoutError` occurs, you can see the information of connection owners (threads):
124
126
 
125
127
  ```
126
- ActiveRecord::ConnectionTimeoutError occured:
128
+ ActiveRecord::ConnectionTimeoutError occurred:
127
129
  connection owners:
128
130
  Thread #<Thread:0x00007fbda205fa70 sleep_forever> status=sleep priority=0
129
131
  /path/to/activerecord-debug_errors/spec/activerecord/debug_errors/ext/connection_adapters/connection_pool_spec.rb:32:in `join'
@@ -22,6 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_runtime_dependency "activerecord", ">= 6", "< 7"
26
- spec.add_development_dependency "mysql2"
25
+ spec.add_runtime_dependency "activerecord", ">= 6", "< 8"
27
26
  end
@@ -0,0 +1,2 @@
1
+ eval_gemfile("../Gemfile")
2
+ gem "activerecord", "~> 6.0.0"
@@ -0,0 +1,2 @@
1
+ eval_gemfile("../Gemfile")
2
+ gem "activerecord", "~> 6.1.0"
@@ -0,0 +1,2 @@
1
+ eval_gemfile("../Gemfile")
2
+ gem "activerecord", "~> 7.0.0"
@@ -0,0 +1,2 @@
1
+ eval_gemfile("../Gemfile")
2
+ gem "activerecord", "~> 7.1.0"
@@ -1,10 +1,18 @@
1
1
  # frozen_string_literal: true
2
+ require "active_record/connection_adapters/abstract_mysql_adapter"
2
3
 
3
4
  module ActiveRecord
4
5
  module DebugErrors
5
6
  module DisplayMySQLInformation
6
- def execute(*args)
7
- super
7
+ # Rails 7 or later never calls ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter#execute
8
+ # cf. https://github.com/rails/rails/pull/43097
9
+ if ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.private_method_defined?(:raw_execute)
10
+ method_name = :raw_execute
11
+ else
12
+ method_name = :execute
13
+ end
14
+ define_method(method_name) do |*args, **kwargs|
15
+ super(*args, **kwargs)
8
16
  rescue ActiveRecord::Deadlocked
9
17
  if logger
10
18
  logger.error "ActiveRecord::Deadlocked occurred:"
@@ -19,6 +27,7 @@ module ActiveRecord
19
27
  end
20
28
  raise
21
29
  end
30
+ private method_name if method_name == :raw_execute
22
31
 
23
32
  private
24
33
 
@@ -40,7 +49,14 @@ module ActiveRecord
40
49
  end
41
50
 
42
51
  def display_innodb_status_section(section_name)
43
- status = ActiveRecord::Base.connection.execute("SHOW ENGINE INNODB STATUS").first[2]
52
+ sql = "SHOW ENGINE INNODB STATUS"
53
+ status = nil
54
+ begin
55
+ status = ActiveRecord::Base.connection.execute(sql).first[2]
56
+ rescue ActiveRecord::StatementInvalid => e
57
+ logger.error "Failed to execute '#{sql}': #{e.message}"
58
+ return
59
+ end
44
60
 
45
61
  prev_line = nil
46
62
  in_deadlock_section = false
@@ -64,7 +80,13 @@ module ActiveRecord
64
80
  end
65
81
  end
66
82
 
67
- require "active_record/connection_adapters/abstract_mysql_adapter"
83
+ ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.descendants.each do |adapter|
84
+ adapter.prepend(ActiveRecord::DebugErrors::DisplayMySQLInformation)
85
+ end
86
+
68
87
  class ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
69
- prepend ActiveRecord::DebugErrors::DisplayMySQLInformation
88
+ def self.inherited(base)
89
+ super
90
+ base.prepend(ActiveRecord::DebugErrors::DisplayMySQLInformation)
91
+ end
70
92
  end
@@ -15,7 +15,7 @@ module ActiveRecord
15
15
  def dump_threads
16
16
  logger = ActiveRecord::Base.logger
17
17
 
18
- logger.error "ActiveRecord::ConnectionTimeoutError occured:"
18
+ logger.error "ActiveRecord::ConnectionTimeoutError occurred:"
19
19
 
20
20
  dump_thread = ->(thread) {
21
21
  logger.error " Thread #{thread} status=#{thread.status} priority=#{thread.priority}"
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module DebugErrors
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-debug_errors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - abicky
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-27 00:00:00.000000000 Z
11
+ date: 2024-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '6'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '7'
22
+ version: '8'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,21 +29,7 @@ dependencies:
29
29
  version: '6'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '7'
33
- - !ruby/object:Gem::Dependency
34
- name: mysql2
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: '0'
40
- type: :development
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: '0'
32
+ version: '8'
47
33
  description: ActiveRecord::DebugErrors is an extension of activerecord to display
48
34
  useful debug logs on errors.
49
35
  email:
@@ -62,6 +48,10 @@ files:
62
48
  - activerecord-debug_errors.gemspec
63
49
  - bin/console
64
50
  - bin/setup
51
+ - gemfiles/activerecord_6_0.gemfile
52
+ - gemfiles/activerecord_6_1.gemfile
53
+ - gemfiles/activerecord_7_0.gemfile
54
+ - gemfiles/activerecord_7_1.gemfile
65
55
  - lib/activerecord-debug_errors.rb
66
56
  - lib/activerecord/debug_errors.rb
67
57
  - lib/activerecord/debug_errors/ext/connection_adapters/abstract_mysql_adapter.rb
@@ -73,7 +63,7 @@ licenses:
73
63
  metadata:
74
64
  homepage_uri: https://github.com/abicky/activerecord-debug_errors
75
65
  source_code_uri: https://github.com/abicky/activerecord-debug_errors
76
- post_install_message:
66
+ post_install_message:
77
67
  rdoc_options: []
78
68
  require_paths:
79
69
  - lib
@@ -88,8 +78,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
78
  - !ruby/object:Gem::Version
89
79
  version: '0'
90
80
  requirements: []
91
- rubygems_version: 3.1.4
92
- signing_key:
81
+ rubygems_version: 3.5.9
82
+ signing_key:
93
83
  specification_version: 4
94
84
  summary: An extension of activerecord to display useful debug logs on errors
95
85
  test_files: []