{"action":"created","issue":{"url":"https://api.github.com/repos/mperham/sidekiq/issues/2298","labels_url":"https://api.github.com/repos/mperham/sidekiq/issues/2298/labels{/name}","comments_url":"https://api.github.com/repos/mperham/sidekiq/issues/2298/comments","events_url":"https://api.github.com/repos/mperham/sidekiq/issues/2298/events","html_url":"https://github.com/mperham/sidekiq/issues/2298","id":68911540,"number":2298,"title":"Error: undefined class/module ActiveRecord::Attribute::","user":{"login":"miksago","id":30827,"avatar_url":"https://avatars.githubusercontent.com/u/30827?v=3","gravatar_id":"","url":"https://api.github.com/users/miksago","html_url":"https://github.com/miksago","followers_url":"https://api.github.com/users/miksago/followers","following_url":"https://api.github.com/users/miksago/following{/other_user}","gists_url":"https://api.github.com/users/miksago/gists{/gist_id}","starred_url":"https://api.github.com/users/miksago/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/miksago/subscriptions","organizations_url":"https://api.github.com/users/miksago/orgs","repos_url":"https://api.github.com/users/miksago/repos","events_url":"https://api.github.com/users/miksago/events{/privacy}","received_events_url":"https://api.github.com/users/miksago/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-04-16T12:19:48Z","updated_at":"2015-07-16T18:45:17Z","closed_at":"2015-04-16T13:53:35Z","body":"From twitter. I have a stacktrace captured in Sentry; I've also posted the package versions I'm using. I haven't posted the \"additional data\" from Sentry, as it includes some stuff I can't release publicly — via private email I can disclose it.\r\n\r\n### Stacktrace (most recent call first):\r\n\r\n```\r\n  psych/class_loader.rb:53:in `path2class'\r\n    path2class(name)\r\n  psych/class_loader.rb:53:in `resolve'\r\n    path2class(name)\r\n  psych/class_loader.rb:45:in `find'\r\n    @cache[klassname] ||= resolve(klassname)\r\n  psych/class_loader.rb:27:in `load'\r\n    find klassname\r\n  psych/visitors/to_ruby.rb:379:in `resolve_class'\r\n    class_loader.load klassname\r\n  psych/visitors/to_ruby.rb:207:in `visit_Psych_Nodes_Mapping'\r\n    obj = revive((resolve_class(name) || class_loader.object), o)\r\n  psych/visitors/visitor.rb:15:in `visit'\r\n    send DISPATCH[target.class], target\r\n  psych/visitors/visitor.rb:5:in `accept'\r\n    visit target\r\n  psych/visitors/to_ruby.rb:31:in `accept'\r\n    result = super\r\n  psych/visitors/to_ruby.rb:321:in `block in revive_hash'\r\n    val = accept(v)\r\n  psych/visitors/to_ruby.rb:319:in `each'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:319:in `each_slice'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:319:in `revive_hash'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:161:in `visit_Psych_Nodes_Mapping'\r\n    return revive_hash(register(o, {}), o) unless o.tag\r\n  psych/visitors/visitor.rb:15:in `visit'\r\n    send DISPATCH[target.class], target\r\n  psych/visitors/visitor.rb:5:in `accept'\r\n    visit target\r\n  psych/visitors/to_ruby.rb:31:in `accept'\r\n    result = super\r\n  psych/visitors/to_ruby.rb:321:in `block in revive_hash'\r\n    val = accept(v)\r\n  psych/visitors/to_ruby.rb:319:in `each'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:319:in `each_slice'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:319:in `revive_hash'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:357:in `revive'\r\n    init_with(s, revive_hash({}, node), node)\r\n  psych/visitors/to_ruby.rb:207:in `visit_Psych_Nodes_Mapping'\r\n    obj = revive((resolve_class(name) || class_loader.object), o)\r\n  psych/visitors/visitor.rb:15:in `visit'\r\n    send DISPATCH[target.class], target\r\n  psych/visitors/visitor.rb:5:in `accept'\r\n    visit target\r\n  psych/visitors/to_ruby.rb:31:in `accept'\r\n    result = super\r\n  psych/visitors/to_ruby.rb:321:in `block in revive_hash'\r\n    val = accept(v)\r\n  psych/visitors/to_ruby.rb:319:in `each'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:319:in `each_slice'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:319:in `revive_hash'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:357:in `revive'\r\n    init_with(s, revive_hash({}, node), node)\r\n  psych/visitors/to_ruby.rb:207:in `visit_Psych_Nodes_Mapping'\r\n    obj = revive((resolve_class(name) || class_loader.object), o)\r\n  psych/visitors/visitor.rb:15:in `visit'\r\n    send DISPATCH[target.class], target\r\n  psych/visitors/visitor.rb:5:in `accept'\r\n    visit target\r\n  psych/visitors/to_ruby.rb:31:in `accept'\r\n    result = super\r\n  psych/visitors/to_ruby.rb:321:in `block in revive_hash'\r\n    val = accept(v)\r\n  psych/visitors/to_ruby.rb:319:in `each'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:319:in `each_slice'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:319:in `revive_hash'\r\n    o.children.each_slice(2) { |k,v|\r\n  psych/visitors/to_ruby.rb:357:in `revive'\r\n    init_with(s, revive_hash({}, node), node)\r\n  psych/visitors/to_ruby.rb:207:in `visit_Psych_Nodes_Mapping'\r\n    obj = revive((resolve_class(name) || class_loader.object), o)\r\n  psych/visitors/visitor.rb:15:in `visit'\r\n    send DISPATCH[target.class], target\r\n  psych/visitors/visitor.rb:5:in `accept'\r\n    visit target\r\n  psych/visitors/to_ruby.rb:31:in `accept'\r\n    result = super\r\n  psych/visitors/to_ruby.rb:314:in `block in register_empty'\r\n    object.children.each { |c| list.push accept c }\r\n  psych/visitors/to_ruby.rb:314:in `each'\r\n    object.children.each { |c| list.push accept c }\r\n  psych/visitors/to_ruby.rb:314:in `register_empty'\r\n    object.children.each { |c| list.push accept c }\r\n  psych/visitors/to_ruby.rb:140:in `visit_Psych_Nodes_Sequence'\r\n    register_empty(o)\r\n  psych/visitors/visitor.rb:15:in `visit'\r\n    send DISPATCH[target.class], target\r\n  psych/visitors/visitor.rb:5:in `accept'\r\n    visit target\r\n  psych/visitors/to_ruby.rb:31:in `accept'\r\n    result = super\r\n  psych/visitors/to_ruby.rb:314:in `block in register_empty'\r\n    object.children.each { |c| list.push accept c }\r\n  psych/visitors/to_ruby.rb:314:in `each'\r\n    object.children.each { |c| list.push accept c }\r\n  psych/visitors/to_ruby.rb:314:in `register_empty'\r\n    object.children.each { |c| list.push accept c }\r\n  psych/visitors/to_ruby.rb:140:in `visit_Psych_Nodes_Sequence'\r\n    register_empty(o)\r\n  psych/visitors/visitor.rb:15:in `visit'\r\n    send DISPATCH[target.class], target\r\n  psych/visitors/visitor.rb:5:in `accept'\r\n    visit target\r\n  psych/visitors/to_ruby.rb:31:in `accept'\r\n    result = super\r\n  psych/visitors/to_ruby.rb:295:in `visit_Psych_Nodes_Document'\r\n    accept o.root\r\n  psych/visitors/visitor.rb:15:in `visit'\r\n    send DISPATCH[target.class], target\r\n  psych/visitors/visitor.rb:5:in `accept'\r\n    visit target\r\n  psych/visitors/to_ruby.rb:31:in `accept'\r\n    result = super\r\n  psych/nodes/node.rb:37:in `to_ruby'\r\n    Visitors::ToRuby.create.accept(self)\r\n  psych.rb:246:in `load'\r\n    result ? result.to_ruby : result\r\n  sidekiq/extensions/action_mailer.rb:16:in `perform'\r\n    (target, method_name, args) = YAML.load(yml)\r\n  sidekiq/processor.rb:75:in `execute_job'\r\n    worker.perform(*cloned_args)\r\n  sidekiq/processor.rb:52:in `block (2 levels) in process'\r\n    execute_job(worker, cloned(msg['args']))\r\n  sidekiq/middleware/chain.rb:127:in `block in invoke'\r\n    yield\r\n  sidekiq/middleware/server/active_record.rb:6:in `call'\r\n    yield\r\n  sidekiq/middleware/chain.rb:129:in `block in invoke'\r\n    chain.shift.call(*args, &traverse_chain)\r\n  sidekiq/middleware/server/retry_jobs.rb:74:in `call'\r\n    yield\r\n  sidekiq/middleware/chain.rb:129:in `block in invoke'\r\n    chain.shift.call(*args, &traverse_chain)\r\n  sidekiq/middleware/server/logging.rb:11:in `block in call'\r\n    yield\r\n  sidekiq/logging.rb:24:in `with_context'\r\n    yield\r\n  sidekiq/middleware/server/logging.rb:7:in `call'\r\n    Sidekiq::Logging.with_context(\"#{worker.class.to_s} JID-#{item['jid']}#{\" BID-#{item['bid']}\" if item['bid']}\") do\r\n  sidekiq/middleware/chain.rb:129:in `block in invoke'\r\n    chain.shift.call(*args, &traverse_chain)\r\n  sidekiq/middleware/chain.rb:132:in `call'\r\n    traverse_chain.call\r\n  sidekiq/middleware/chain.rb:132:in `invoke'\r\n    traverse_chain.call\r\n  sidekiq/processor.rb:51:in `block in process'\r\n    Sidekiq.server_middleware.invoke(worker, msg, queue) do\r\n  sidekiq/processor.rb:98:in `stats'\r\n    yield\r\n  sidekiq/processor.rb:50:in `process'\r\n    stats(worker, msg, queue) do\r\n  celluloid/calls.rb:26:in `public_send'\r\n    obj.public_send(@method, *@arguments, &_block)\r\n  celluloid/calls.rb:26:in `dispatch'\r\n    obj.public_send(@method, *@arguments, &_block)\r\n  celluloid/calls.rb:122:in `dispatch'\r\n    super(obj)\r\n  celluloid/cell.rb:60:in `block in invoke'\r\n    call.dispatch(@subject)\r\n  celluloid/cell.rb:71:in `block in task'\r\n    yield\r\n  celluloid/actor.rb:357:in `block in task'\r\n    yield\r\n  celluloid/tasks.rb:57:in `block in initialize'\r\n    yield\r\n  celluloid/tasks/task_fiber.rb:15:in `block in create'\r\n    yield\r\n```\r\n\r\n### Package Versions\r\n```\r\nactionmailer\t4.2.0\r\nactionpack\t4.2.0\r\nactionview\t4.2.0\r\nactivejob\t4.2.0\r\nactivemodel\t4.2.0\r\nactiverecord\t4.2.0\r\nactivesupport\t4.2.0\r\narel\t6.0.0\r\naws-sdk\t2.0.31\r\naws-sdk-core\t2.0.31\r\naws-sdk-resources\t2.0.31\r\naxiom-types\t0.1.1\r\nbcrypt\t3.1.10\r\nbuilder\t3.2.2\r\nbundler\t1.7.12\r\ncelluloid\t0.16.0\r\ncoercible\t1.0.0\r\nconnection_pool\t2.2.0\r\ndescendants_tracker\t0.0.4\r\ndiffy\t3.0.7\r\ndotenv\t1.0.2\r\nequalizer\t0.0.10\r\nerubis\t2.7.0\r\nexecjs\t2.3.0\r\nfaker\t1.4.3\r\nfaraday\t0.9.1\r\nforeman\t0.76.0\r\nfriendly_id\t5.1.0\r\nglobalid\t0.3.0\r\ngrape\t0.11.0\r\ngrape-entity\t0.4.5\r\ngrape-swagger\t0.10.1\r\ngrape-swagger-rails\t0.1.0\r\nhashie\t3.4.0\r\nhike\t1.2.3\r\nhitimes\t1.2.2\r\nhstore_flags\t0.4.0\r\ni18n\t0.7.0\r\nice_nine\t0.11.1\r\njmespath\t1.0.2\r\njquery-rails\t4.0.3\r\njson\t1.8.2\r\njwt\t1.4.0\r\nloofah\t2.0.1\r\nmail\t2.6.3\r\nmime-types\t2.4.3\r\nmini_portile\t0.6.2\r\nminitest\t5.5.1\r\nmulti_json\t1.10.1\r\nmulti_xml\t0.5.5\r\nmultipart-post\t2.0.0\r\nnokogiri\t1.6.6.2\r\noauth\t0.4.7\r\noauth2\t1.0.0\r\npg\t0.18.1\r\npg_array_parser\t0.0.9\r\npostgres_ext\t2.4.1\r\npuma\t2.11.0\r\nrack\t1.6.0\r\nrack-accept\t0.4.5\r\nrack-contrib\t1.2.0\r\nrack-cors\t0.3.1\r\nrack-mount\t0.8.3\r\nrack-policy\t0.4.1\r\nrack-protection\t1.5.3\r\nrack-test\t0.6.3\r\nrack-utf8_sanitizer\t1.3.0\r\nrails\t4.2.0\r\nrails-deprecated_sanitizer\t1.0.3\r\nrails-dom-testing\t1.0.5\r\nrails-html-sanitizer\t1.0.1\r\nrails_12factor\t0.0.3\r\nrails_safe_tasks\t1.0.0\r\nrails_serve_static_assets\t0.0.4\r\nrails_stdout_logging\t0.0.3\r\nrailties\t4.2.0\r\nrake\t10.4.2\r\nredis\t3.2.1\r\nredis-namespace\t1.5.2\r\nrepresentable\t2.1.5\r\nresponders\t2.1.0\r\nroar\t1.0.1\r\nroar-rails\t1.0.1\r\nsass\t3.4.11\r\nsass-rails\t5.0.1\r\nsentry-raven\t0.12.3\r\nsidekiq\t3.3.3\r\nsinatra\t1.4.6\r\nsorcery\t0.9.0\r\nsprockets\t2.12.3\r\nsprockets-rails\t2.2.4\r\ntest_xml\t0.1.7\r\nthor\t0.19.1\r\nthread_safe\t0.3.4\r\ntilt\t1.4.1\r\ntimers\t4.0.1\r\ntzinfo\t1.2.2\r\nuber\t0.0.13\r\nuglifier\t2.7.0\r\nvirtus\t1.0.5\r\n```"},"comment":{"url":"https://api.github.com/repos/mperham/sidekiq/issues/comments/122046826","html_url":"https://github.com/mperham/sidekiq/issues/2298#issuecomment-122046826","issue_url":"https://api.github.com/repos/mperham/sidekiq/issues/2298","id":122046826,"user":{"login":"jmccartie","id":133393,"avatar_url":"https://avatars.githubusercontent.com/u/133393?v=3","gravatar_id":"","url":"https://api.github.com/users/jmccartie","html_url":"https://github.com/jmccartie","followers_url":"https://api.github.com/users/jmccartie/followers","following_url":"https://api.github.com/users/jmccartie/following{/other_user}","gists_url":"https://api.github.com/users/jmccartie/gists{/gist_id}","starred_url":"https://api.github.com/users/jmccartie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jmccartie/subscriptions","organizations_url":"https://api.github.com/users/jmccartie/orgs","repos_url":"https://api.github.com/users/jmccartie/repos","events_url":"https://api.github.com/users/jmccartie/events{/privacy}","received_events_url":"https://api.github.com/users/jmccartie/received_events","type":"User","site_admin":false},"created_at":"2015-07-16T18:45:17Z","updated_at":"2015-07-16T18:45:17Z","body":"I started getting this error after upgrading to Rails 4.2.  I made no changes to my code otherwise.\r\n\r\n```\r\nArgumentError: undefined class/module Struct::ActiveRecord::\r\n... 95 non-project frames\r\nArgumentError: undefined class/module ActiveRecord::Attribute::\r\n... 95 non-project frames\r\n```\r\n\r\nWhen I go to the Sidekiq dashboard and \"Retry All\", they succeed with no issue.  \r\n\r\nOffending code:\r\n\r\n```ruby\r\nReportMailer.delay.due(user, :tomorrow)\r\n```\r\n\r\nAny idea on what changed where passing the object into the mailer no longer works? (but magically works on a Retry All?)"}}