#ruby-on-rails #ruby #devise #sendmail #mailer
#ruby-on-rails #рубин #разработке #отправить почту #почтовая программа
Вопрос:
Просто сегодня одна проблема за другой. Я только что развернул на своем рабочем сервере и тестировал его, с проблемами всякий раз, когда что-либо связано с электронной почтой. В частности, с подтверждаемым регистрационным письмом Devise, всякий раз, когда я регистрирую учетную запись, в журнале появляется следующая ошибка…
ActionView::Template::Error (You can no longer call ActionMailer::Base.default_url_options directly. You need to set config.action_mailer.default_url_options. If you are using ActionMailer standalone, you need to include the routing url_helpers directly.):
Просматривая мой config / environments /production.rb, у меня есть следующий набор…
config.action_mailer.default_url_options = { :host => 'localhost' }
Таким образом, config.action_mailer.default_url_options ИСПОЛЬЗУЕТСЯ, но полностью игнорируется. Я попытался изменить хост на ‘127.0.0.1’ и добавить IP-адрес моего сервера, но у него его не было. Запустил его в config/ application.rb, но без перехода. Я искал в своем проекте любые другие строки, объявляющие default_url_options, но это задано только в файле production.rb. Я погуглил и нашел сообщение, предлагающее присвоить config.cache_classes значение false , но там тоже отрицательное значение.
Теперь вот что безумно…Я получал ту же ошибку всякий раз, когда пытался отправить совершенно новый комментарий в своем проекте (настроен на отправку электронного письма для подтверждения адреса электронной почты, если вы комментируете впервые). Я удалил config.action_mailer … etc из файла production.rb, и программа отправки комментариев viola — my сработала и отправила электронное письмо просто отлично!
Тем не менее, Devise абсолютно упрям и продолжает выдавать мне вышеупомянутую ошибку. Есть идеи о том, почему? Кстати, все мои драгоценные камни обновлены. Ниже приведен мой производственный файл.rb.
— ОБНОВИТЬ —————
Добились небольшого прогресса, но это просто странно. Когда я запускаю сервер и пытаюсь сделать что-то, что отправит почту (регистрация пользователя, комментарий), я получаю сообщение об ошибке ActionMailer::Base выше. Когда я пытаюсь выполнить действие AGAIN…it работает, и почта отправляется. С этого момента (до перезагрузки пассажира и / или сервера) все действия почтовой программы работают нормально.
Но не без еще одной проблемы (она никогда не заканчивается) … по какой-то причине текст письма полностью пустой.
Ответ №1:
В итоге я снова столкнулся с этой проблемой, когда попытался протестировать в тестовой базе данных, и я был полон решимости раз и навсегда выяснить, почему я получаю эту ошибку, и почему никто другой, похоже, не сталкивался с ней (очень мало результатов от Google).
После полного демонтажа моего проекта и его реконструкции я, наконец, точно определил проблемы с установленным мной плагином Sitemap-generator. Как только я удалил все следы этого, вышеупомянутая ошибка, наконец, прекратилась.
Ответ №2:
Я работаю над этой проблемой для Fat Free CRM, и я понял, что эта ошибка возникает из-за того, что Rails 3 лениво загружает классы. Все, что вам нужно сделать, это «коснуться» ActionMailer::Base class в ваших файлах environments / **.rb, и он загрузит класс. Затем вы можете вызвать ActionMailer::Base.default_url_options из контроллера и т.д. (Мы делаем это, чтобы мы могли автоматически установить хост почтовой программы из request.host_with_port)
Итак, мои файлы окружения теперь выглядят следующим образом:
FatFreeCRM::Application.configure do
...
ActionMailer::Base
end
Ответ №3:
Я полагаю, что решил эту проблему … хотя я не «точно» уверен, что это сделало. Вполне возможно, что это был config.cache_classes = true, который я закомментировал, и хотя я был обеспокоен тем, что это повлияет на кэширование моего сайта или что-то еще, похоже, это не нарушило его.
Кроме того, пустое тело электронного письма, которое я решил, переключившись с :sendmail на : smtp.
Вот мой окончательный файл production.rb, надеюсь, это может пригодиться кому-нибудь с подобной проблемой в будущем.
MyProject::Application.configure do
# Commented out, causes 'ActionView::Template' error
#config.cache_classes = true
config.whiny_nils = true
config.consider_all_requests_local = true
config.action_view.debug_rjs = true
config.action_controller.perform_caching = true
config.cache_store = :mem_cache_store
config.active_support.deprecation = :log
config.action_dispatch.best_standards_support = :builtin
config.action_mailer.raise_delivery_errors = true
Sunspot.config.solr.url = 'http://127.0.0.1:8080/solr'
Paperclip.options[:command_path] = "/usr/bin/"
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:enable_starttls_auto => true,
:port => 587,
:authentication => :plain,
:user_name => "user@domain.com",
:password => 'password'
}
config.action_mailer.default_url_options = { :host => 'dev.mydomain.com' }
config.time_zone = "Central Time (US amp; Canada)"
end