Rails / Devise / Mailer: выдает ошибку ‘config.action_mailer.default_url_options’ при попытке регистрации

#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