Tôi đã thiết lập sidekiq trong một ứng dụng đường ray 4 để gửi email và xử lý các công việc nền. Tôi cũng đã nghĩ ra rằng tôi đang sử dụng devise_async và một trình gửi email liên hệ điển hình. Tôi đang sử dụng gmail để gửi email.Sidekiq và ray 4 actionmailer không bao giờ gửi email
Nếu tôi loại bỏ sidekiq, nó sẽ gửi email thông thường qua gmail (cả hình thức liên lạc và liên hệ) nhưng khi tôi bật nó, nó không hoạt động (không phải là devise_async không liên hệ với mẫu). Sidekiq cho thấy rằng các công việc nền tảng bắt đầu và kết thúc thành công (tôi cũng thấy chúng thông qua ứng dụng sinatra mà nó đã được xử lý) nhưng email chưa bao giờ được gửi đi.
Trong quá trình phát triển, bảng điều khiển cho thấy các email được gửi (cả với devise_async và từ biểu mẫu liên hệ, vì chúng được xử lý với sidekiq thành công).
Những gì tôi đã có thử:
- Tôi đã thêm các chi nhánh github cho rails4 của sidekiq (Tôi cũng đã thử các bậc thầy)
- Tôi đã cập nhật và kiểm tra redis phiên bản lớn hơn 2.4 (đó là 2.6.14)
- tôi đang chạy sidekiq với
bundle exec sidekiq
nhưng không làm việc. Tôi đang sử dụng ruby 2.0.0-p247.
Tôi cũng đã thiết lập xử lý hình ảnh với sidekiq trong ứng dụng này và hoạt động hoàn hảo cả trong phát triển và trong sản xuất.
Tôi không làm bất cứ điều gì lạ mắt nhưng tôi thêm mã hoàn thành:
đang bưu phẩm của tôi:
def send_message
@message = Message.new(message_params)
if @message.save
ContactMailer.delay.contact_form(@message.id)
end
end
bưu phẩm của tôi:
def contact_form(message_id)
message = Message.where(id: message_id).first
@email = message.email
@message = message.text
mail(to: "[email protected]", subject: "Message from contact form")
end
và cấu hình của tôi phục vụ sản xuất (mà nó hoạt động mà không có sidekiq):
config.action_mailer.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:authentication => "plain",
:enable_starttls_auto => true,
:user_name => "myusername",
:password => "mypassword"
}
config.action_mailer.default_url_options = { :host => "mydomain.com" }
Và đây một hàng đợi sidekiq tiêu biểu:
/home/john/.rvm/gems/[email protected]/bundler/gems/sidekiq-4ed6eba8aff1/lib/sidekiq/rails.rb:14: warning: toplevel constant Queue referenced by Sidekiq::Client::Queue
2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: Booting Sidekiq 2.5.2 with Redis at redis://localhost:6379/0
2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: Running in ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: See LICENSE and the LGPL-3.0 for licensing details.
2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: Starting processing, hit Ctrl-C to stop
2013-07-19T09:48:11Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-4a7e66a14deab112191e4b49 INFO: start
2013-07-19T09:48:12Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-4a7e66a14deab112191e4b49 INFO: done: 1.214 sec
2013-07-19T09:48:50Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-32191822b789f5b6896a5353 INFO: start
2013-07-19T09:48:51Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-32191822b789f5b6896a5353 INFO: done: 0.143 sec
2013-07-19T09:49:29Z 20112 TID-1u2z02 Sidekiq::Extensions::DelayedMailer JID-c1911e0c4b72295dc067d57f INFO: start
2013-07-19T09:49:29Z 20112 TID-1u2z02 Sidekiq::Extensions::DelayedMailer JID-c1911e0c4b72295dc067d57f INFO: done: 0.152 sec
tôi nghĩ rằng nó đã làm với ActionMailer và sidekiq nhưng tôi không biết làm thế nào để gỡ lỗi, mọi thứ dường như làm việc nhưng các email không bao giờ chuyển giao.
Tệp nhật ký có chứa bất kỳ điều gì hữu ích không? –
Chỉ cảnh báo này: me/ujohn/.rvm/gems/[email protected]/bundler/gems/sidekiq-4ed6eba8aff1/lib/sidekiq/rails.rb: 14: cảnh báo: Hàng đợi liên tục được tham chiếu bởi Sidekiq :: Khách hàng :: Hàng đợi nhưng hàng đợi của sidekiq dường như hoạt động tốt. Việc xử lý các email với các hành động có vẻ như bị hỏng. – JohnDel
Điều này nghe có vẻ giống như một con bọ, dường như bạn đang làm những việc đúng đắn. Tôi sẽ nêu nó như một vấn đề trên repo. –