collectiveidea / audited

Audited (formerly acts_as_audited) is an ORM extension that logs all changes to your Rails models.
MIT License
3.38k stars 655 forks source link

Crash with set_callback: undefined method `append' for nil:NilClass (NoMethodError) #538

Open RealEnder opened 4 years ago

RealEnder commented 4 years ago

Hi, I'm trying to add audited gem to redmine 4.1 through separate plugin(I'm the plugin author): https://github.com/RealEnder/redmine_auditlog This is done with simple monkey patch like this: init.rb Group.send(:include, RedmineAuditlog::AuditlogPatch) redmine_auditlog.rb:

module RedmineAuditlog

  module AuditlogPatch
    def self.included(base)
      base.class_eval do
        unloadable # Send unloadable so it will not be unloaded in development
        audited
      end
    end
  end

With redmine versions before 4.x this worked, but with 4.0.x/4.1.x I'm getting this error:

Traceback (most recent call last):
    54: from bin/rails:4:in `<main>'
    53: from bin/rails:4:in `require'
    52: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/commands.rb:18:in `<top (required)>'
    51: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/command.rb:46:in `invoke'
    50: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/command/base.rb:69:in `perform'
    49: from /usr/local/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
    48: from /usr/local/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
    47: from /usr/local/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
    46: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/commands/generate/generate_command.rb:21:in `perform'
    45: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/command/actions.rb:15:in `require_application_and_environment!'
    44: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/command/actions.rb:28:in `require_environment!'
    43: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/application.rb:337:in `require_environment!'
    42: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/dependencies.rb:291:in `require'
    41: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/dependencies.rb:257:in `load_dependency'
    40: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/dependencies.rb:291:in `block in require'
    39: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/dependencies.rb:291:in `require'
    38: from /opt/redmine-4.1.1/config/environment.rb:16:in `<top (required)>'
    37: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/application.rb:361:in `initialize!'
    36: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/initializable.rb:60:in `run_initializers'
    35: from /usr/local/lib/ruby/2.5.0/tsort.rb:205:in `tsort_each'
    34: from /usr/local/lib/ruby/2.5.0/tsort.rb:226:in `tsort_each'
    33: from /usr/local/lib/ruby/2.5.0/tsort.rb:347:in `each_strongly_connected_component'
    32: from /usr/local/lib/ruby/2.5.0/tsort.rb:347:in `call'
    31: from /usr/local/lib/ruby/2.5.0/tsort.rb:347:in `each'
    30: from /usr/local/lib/ruby/2.5.0/tsort.rb:349:in `block in each_strongly_connected_component'
    29: from /usr/local/lib/ruby/2.5.0/tsort.rb:431:in `each_strongly_connected_component_from'
    28: from /usr/local/lib/ruby/2.5.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
    27: from /usr/local/lib/ruby/2.5.0/tsort.rb:228:in `block in tsort_each'
    26: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/initializable.rb:61:in `block in run_initializers'
    25: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/initializable.rb:32:in `run'
    24: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/initializable.rb:32:in `instance_exec'
    23: from /usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.4.2/lib/rails/application/finisher.rb:63:in `block in <module:Finisher>'
    22: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/reloader.rb:89:in `prepare!'
    21: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:131:in `run_callbacks'
    20: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:513:in `invoke_before'
    19: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:513:in `each'
    18: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:513:in `block in invoke_before'
    17: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:199:in `block in halting'
    16: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:605:in `block in default_terminator'
    15: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:605:in `catch'
    14: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:606:in `block (2 levels) in default_terminator'
    13: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:198:in `block (2 levels) in halting'
    12: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:426:in `block in make_lambda'
    11: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:426:in `instance_exec'
    10: from /opt/redmine-4.1.1/plugins/redmine_auditlog/init.rb:61:in `block (2 levels) in <top (required)>'
     9: from /opt/redmine-4.1.1/plugins/redmine_auditlog/init.rb:61:in `include'
     8: from /opt/redmine-4.1.1/plugins/redmine_auditlog/lib/redmine_auditlog.rb:14:in `included'
     7: from /opt/redmine-4.1.1/plugins/redmine_auditlog/lib/redmine_auditlog.rb:14:in `class_eval'
     6: from /opt/redmine-4.1.1/plugins/redmine_auditlog/lib/redmine_auditlog.rb:16:in `block in included'
     5: from /usr/local/lib/ruby/gems/2.5.0/gems/audited-4.9.0/lib/audited/auditor.rb:81:in `audited'
     4: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:674:in `set_callback'
     3: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:625:in `__update_callbacks'
     2: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:625:in `reverse_each'
     1: from /usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:627:in `block in __update_callbacks'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.4.2/lib/active_support/callbacks.rb:675:in `block in set_callback': undefined method `append' for nil:NilClass (NoMethodError)

User and Group classes are inherited from Principal class, which is inherited from ActiveRecord::Base Tried with current 4.9 audited. The env: Redmine version 4.1.1.stable Ruby version 2.5.1-p57 (2018-03-29) [x86_64-linux] Rails version 5.2.4.2

WKupper commented 4 years ago

Just wanted to add my voice to this that it would be really nice to figure out and fix. This audit plugin is very important to Redmine security.