2009-06-30 6 views
0

Я работаю над приложением rails, которое использует плавный плагин проверки подлинности. Это требует, чтобы новый пользователь активировал свою учетную запись посредством проверки по электронной почте. Это работает до нескольких часов назад, когда приложение внезапно начало работать с ошибкой при доставке электронной почты. Вместо этого я поздоровался со следующим сообщением об ошибке:Rails ActionMailer с остальным плагином аутентификации не доставляет почту

undefined method `perform_delivery_SMTP' for #<UserMailer:0x28ec7ac> 

Я вернулся к старой версии, создал новые приложения с ActionMailer, переустановил рельсы, переустановил все плагин и драгоценные камни, но ошибка сохраняется. Кто-нибудь видел эту ошибку раньше? Казалось бы, мне нужно добавить метод perform_delivery_SMTP к модели UserMailer, но как и почему? Благодарю.

ответ

3

Где вы настраиваете почтовую программу?

Я предполагаю, что ваш способ доставки устанавливается как этот

ActionMailer::Base.delivery_method 'SMTP' 

Использование :smtp вместо 'SMTP'

ActionMailer предполагает, что вы будете использовать :smtp, :sendmail или :test

It использует это в методе deliver!, например

__send__("perform_delivery_#{delivery_method}", mail) if perform_deliveries 

, что означает, что, когда delivery_method установлен в «SMTP», он будет пытаться вызвать perform_delivery_SMTP, который не существует, как вы выяснили. Когда вы используете символ :smtp, он вызывает perform_delivery_smtp, который существует.

+0

Спасибо! Это мгновенно устранило проблему. Ты спасатель жизни. – Anon

+0

Хороший улов. Я понятия не имел: P –

0

Те, кто борется с ActionMailer работает нормально на локальном сервере (режим разработки) и не работает в режиме производства следует учитывать следующие ссылки:

http://filiptepper.com/2009/02/11/hint-fixing-smtp_tlsrb-for-ruby-187/

Это решило мою проблему, может оказаться полезным для других слишком. В основном проблема заключается в том, что «check_auth_args в Net :: SMTP принимает разные аргументы в Ruby 1.8.7 (который я использую для разработки) и в Ruby 1.8.6 (staging)». И самое страшное, что он не оставляет ошибки в файле production.log. Чтобы убедиться, что это действительно была проблема, я должен был запустить ActionMailer для отправки электронной почты с скрипта/консоли, где он поднял ошибку неправильного количества аргументов ...