Delayed mail from rails runner fails

84 views
Skip to first unread message

Trey Dockendorf

unread,
Mar 9, 2015, 7:19:14 PM3/9/15
to sid...@googlegroups.com
I have found that I am unable to use the delay method when sending emails if the mailer delay is executed from a rails runner command.

These are versions:

ruby-2.0.0-p481
rails-4.1.4
sidekiq-3.3.2

The model:

class Account < ActiveRecord::Base
  belongs_to :status

  scope
:requested, -> { joins(:status).where('statuses.name = ?', 'REQUESTED') }


 
def self.check_pending_requests
    requested_accounts
= self.requested
   
# A notification was sent out upon creation so only check
   
# for pending requests older than Settings.check_pending_requests_frequency
    accounts
= requested_accounts.where("accounts.confirmed_at < ?", Time.now - Settings.check_pending_requests_frequency)
   
return if accounts.empty?

   
AdminMailer.delay.pending_requests_notification(accounts)

 
end
end

The mailer:

class AdminMailer < ActionMailer::Base

 
def pending_requests_notification(accounts)
   
@accounts = accounts
    mail to
: Settings.admin_emails, subject: "Brazos Account Requests pending"
 
end
end


If I change the AdminMailer line to "AdminMailer.pending_requests_notification(accounts).deliver", things work as expected.

If I run the command generated by whenever the sidekiq task generates an exception:

/bin/bash -l -c 'cd /Users/treydock/git/account_manager && bin/rails runner -e development '\''Account.check_pending_requests'\'''

The exception from console where I launched sidekiq is below.  I am unsure how to debug this further.  If additional information would help, please let me know.

2015-03-09T22:54:34.753Z 11947 TID-ow4vaz1ik Sidekiq::Extensions::DelayedMailer JID-86813bc941e1d0f872f8aec0 INFO: start
2015-03-09T22:54:34.756Z 11947 TID-ow4vaz1ik Sidekiq::Extensions::DelayedMailer JID-86813bc941e1d0f872f8aec0 INFO: fail: 0.003 sec
2015-03-09T22:54:34.757Z 11947 TID-ow4vaz1ik WARN: {"retry"=>true, "queue"=>"default", "class"=>"Sidekiq::Extensions::DelayedMailer", "args"=>["---\n- !ruby/class 'AdminMailer'\n- :pending_requests_notification\n- - !ruby/object:ActiveRecord::Relation\n    klass: &1 !ruby/class 'Account'\n    table: &2 !ruby/object:Arel::Table\n      name: accounts\n      engine: *1\n      columns: \n      aliases: []\n      table_alias: \n      primary_key: \n    values:\n      :where:\n      - &4 !ruby/object:Arel::Nodes::Equality\n        left: !ruby/struct:Arel::Attributes::Attribute\n          relation: *2\n          name: deleted_at\n        right: \n      - statuses.name = 'REQUESTED'\n      - accounts.confirmed_at < '2015-03-09 22:48:25'\n      :bind: []\n      :from: \n      :lock: \n      :reverse_order: \n      :joins:\n      - :status\n    offsets: {}\n    loaded: true\n    arel: !ruby/object:Arel::SelectManager\n      engine: *1\n      ctx: &5 !ruby/object:Arel::Nodes::SelectCore\n        source: !ruby/object:Arel::Nodes::JoinSource\n          left: *2\n          right:\n          - !ruby/object:Arel::Nodes::InnerJoin\n            left: &3 !ruby/object:Arel::Table\n              name: statuses\n              engine: !ruby/class 'ActiveRecord::Base'\n              columns: \n              aliases: []\n              table_alias: \n              primary_key: \n            right: !ruby/object:Arel::Nodes::On\n              expr: !ruby/object:Arel::Nodes::Equality\n                left: !ruby/struct:Arel::Attributes::Attribute\n                  relation: *3\n                  name: id\n                right: !ruby/struct:Arel::Attributes::Attribute\n                  relation: *2\n                  name: status_id\n        top: \n        set_quantifier: \n        projections:\n        - !ruby/struct:Arel::Attributes::Attribute\n          relation: *2\n          name: !ruby/object:Arel::Nodes::SqlLiteral '*'\n        wheres:\n        - !ruby/object:Arel::Nodes::And\n          children:\n          - *4\n          - !ruby/object:Arel::Nodes::Grouping\n            expr: !ruby/object:Arel::Nodes::SqlLiteral statuses.name = 'REQUESTED'\n          - !ruby/object:Arel::Nodes::Grouping\n            expr: !ruby/object:Arel::Nodes::SqlLiteral accounts.confirmed_at < '2015-03-09\n              22:48:25'\n        groups: []\n        having: \n        windows: []\n      bind_values: []\n      ast: !ruby/object:Arel::Nodes::SelectStatement\n        cores:\n        - *5\n        orders: []\n        limit: \n        lock: \n        offset: \n        with: \n    scope_for_create: \n    order_clause: \n    to_sql: \n    last: \n    join_dependency: \n    should_eager_load: false\n    records:\n    - !ruby/object:Account\n      attributes:\n        id: 12\n        request_id: 20150213153206TD\n        requested_username: treydock10\n        username: treydock10\n        firstname: Trey\n        lastname: Dockendorf\n        email: trey...@gmail.com\n        phone: ''\n        department: ATLT\n        requested_nodehours: \n        request_description: \"TEST\\r\\nLINE 2\"\n        nodehours: \n        nodehours_original: \n        review_description: ''\n        expires: \n        status_id: 4\n        primary_group_id: 1\n        classification_id: 6\n        organization_id: 1\n        created_at: 2014-10-13 23:28:56.000000000 Z\n        updated_at: 2015-03-09 22:52:04.000000000 Z\n        deleted_at: \n        confirmation_token: \n        confirmed_at: 2015-02-13 21:33:26.000000000 Z\n        confirmation_sent_at: 2015-02-13 21:32:06.000000000 Z\n        reviewed_by_id: 1\n        submitted_by_id: 1\n        create_home: true\n"], "jid"=>"86813bc941e1d0f872f8aec0", "enqueued_at"=>1425941605.442451, "error_message"=>"undefined method `engine' for nil:NilClass", "error_class"=>"NoMethodError", "failed_at"=>1425941674.756212, "retry_count"=>1, "retried_at"=>1425941674.7557602, "processor"=>"<OMIT>:11947"}
2015-03-09T22:54:34.758Z 11947 TID-ow4vaz1ik WARN: undefined method `engine' for nil:NilClass
2015-03-09T22:54:34.758Z 11947 TID-ow4vaz1ik WARN: /Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/activerecord-4.1.4/lib/active_record/relation/query_methods.rb:836:in `build_arel'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/activerecord-4.1.4/lib/active_record/relation/query_methods.rb:830:in `arel'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/activerecord-4.1.4/lib/active_record/relation/delegation.rb:119:in `respond_to?'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:313:in `init_with'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:306:in `revive'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:178:in `visit_Psych_Nodes_Mapping'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/visitor.rb:15:in `visit'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/visitor.rb:5:in `accept'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:20:in `accept'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:259:in `block in register_empty'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:259:in `each'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:259:in `register_empty'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:122:in `visit_Psych_Nodes_Sequence'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/visitor.rb:15:in `visit'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/visitor.rb:5:in `accept'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:20:in `accept'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:259:in `block in register_empty'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:259:in `each'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:259:in `register_empty'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:122:in `visit_Psych_Nodes_Sequence'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/visitor.rb:15:in `visit'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/visitor.rb:5:in `accept'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:20:in `accept'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:240:in `visit_Psych_Nodes_Document'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/visitor.rb:15:in `visit'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/visitor.rb:5:in `accept'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/visitors/to_ruby.rb:20:in `accept'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych/nodes/node.rb:35:in `to_ruby'
/Users/treydock/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/psych.rb:130:in `load'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/extensions/action_mailer.rb:16:in `perform'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/processor.rb:75:in `execute_job'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/processor.rb:52:in `block (2 levels) in process'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/chain.rb:127:in `call'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/chain.rb:127:in `block in invoke'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/server/active_record.rb:6:in `call'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/server/retry_jobs.rb:74:in `call'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-failures-0.4.3/lib/sidekiq/failures/middleware.rb:9:in `call'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/server/logging.rb:11:in `block in call'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/logging.rb:24:in `with_context'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/server/logging.rb:7:in `call'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/chain.rb:132:in `call'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/middleware/chain.rb:132:in `invoke'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/processor.rb:51:in `block in process'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/processor.rb:98:in `stats'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/sidekiq-3.3.2/lib/sidekiq/processor.rb:50:in `process'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `public_send'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `dispatch'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/celluloid-0.16.0/lib/celluloid/calls.rb:122:in `dispatch'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/celluloid-0.16.0/lib/celluloid/cell.rb:60:in `block in invoke'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/celluloid-0.16.0/lib/celluloid/cell.rb:71:in `block in task'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/celluloid-0.16.0/lib/celluloid/actor.rb:357:in `block in task'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/celluloid-0.16.0/lib/celluloid/tasks.rb:57:in `block in initialize'
/Users/treydock/.rvm/gems/ruby-2.0.0-p481@account_manager/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb:15:in `block in create'

Thanks,
- Trey

Mike Perham

unread,
Mar 9, 2015, 7:23:49 PM3/9/15
to sid...@googlegroups.com
Don't pass complex objects, perform the query inside the mailer method. I suspect the accounts array is the problem. 

--
You received this message because you are subscribed to the Google Groups "Sidekiq" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sidekiq+u...@googlegroups.com.
To post to this group, send email to sid...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sidekiq/d90d2071-9023-461a-8ada-d4d4f2ff0bee%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Trey Dockendorf

unread,
Mar 10, 2015, 2:08:31 PM3/10/15
to sid...@googlegroups.com
That was the problem, thanks.  I modified the code to pass an array of ID values which is then used inside the mailer method to find the account records.

Thanks,
- Trey

--
You received this message because you are subscribed to a topic in the Google Groups "Sidekiq" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/sidekiq/CCgF6jgzMtI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to sidekiq+u...@googlegroups.com.

To post to this group, send email to sid...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages