Ich bin mit Rails 4.2 auf Heroku (Zeder), Rubin 2.1.6Wie kann ich ActiveJob dazu bringen, Jobs in Sidekiq auf Heroku in die Warteschlange einzureihen, wenn es von der App (nicht von der Konsole aus) aufgerufen wird?
Ich habe Sidekiq lokal auf Redis mit Foreman läuft, und in meiner app nenne ich wie diese neuen ActiveJob deliver_later Methoden Rails, innen application_helper.rb
:
assigning_user = User.find(object.created_by)
completing_user = User.find(object.completed_by)
if NotificationMailer.assigned_user_completed_todo(object, completing_user, assigning_user).deliver_later
nn.email_status = "sent"
end
Lokal, das funktioniert wie beabsichtigt. Mails werden in der 'mailers'-Warteschlange angezeigt und dann mit sendgrid verarbeitet und zugestellt.
Auf heroku run rails console
Ich kann es manuell auslösen, und es funktioniert gut:
Loading production environment (Rails 4.2.1)
irb(main):001:0> a = Account.first
Account Load (1.5ms) SELECT "accounts".* FROM "accounts" ORDER BY "accounts"."id" ASC LIMIT 1
=> #<Account id: 1, name: "The Prestons", stripe_customer_id: nil, active_until: "2015-06-27 14:50:43", plan: nil, created_at: "2015-04-27 14:50:43", updated_at: "2015-04-27 14:50:43">
irb(main):002:0> NotificationMailer.new_account_created(a).deliver_later
Enqueued ActionMailer::DeliveryJob (Job ID: 7c0ddf9c-6892-4aa9-823e-9954b2a4e642) to Sidekiq(mailers) with arguments: "NotificationMailer", "new_account_created", "deliver_now", gid://raisin/Account/1
=> #<ActionMailer::DeliveryJob:0x007f4d9ed9da58 @arguments=["NotificationMailer", "new_account_created", "deliver_now", #<Account id: 1, name: "The Prestons", stripe_customer_id: nil, active_until: "2015-06-27 14:50:43", plan: nil, created_at: "2015-04-27 14:50:43", updated_at: "2015-04-27 14:50:43">], @job_id="7c0ddf9c-6892-4aa9-823e-9954b2a4e642", @queue_name="mailers">
aber wenn ich einfach komplette Aktionen in meiner app, so wie ich als Benutzer würde, nichts jemals in die Warteschlange geliefert ... Ich habe keine Ideen mehr. Ich führe einen Arbeitsprozess. Ich bin mit dem Redis Cloud-Server verbunden. Ich kann das sidekiq Web Dashboard sehen.
Was stelle ich nicht ein? Gerne andere Logs/Infos zu liefern, aber nicht sicher, was noch zu bieten ist.
Meine Konsole meldet einfach die Aktion:
2015-05-14T09:14:37.674095+00:00 heroku[router]: at=info method=POST path="/accounts/1/projects/15/lists/33/items/112" host=www.myapp.com request_id=516db810-8a2c-4fd0-af89-29a59783b0a8 fwd="76.104.193.78" dyno=web.1 connect=1ms service=111ms status=200 bytes=2039
Beginnen Sie Sidekiq mit '-q-Mailern'? –
Ja - vergessen, das zu erwähnen. IN meinem procfile: 'Arbeiter: Bündel exec sidekiq -q Standard-q mailers' –