Heroku / devise – Отсутствует хост для ссылки! Укажите параметр хоста или установите default_url_options

Я пытаюсь нажать мое приложение на героку. Я все еще в dev. Я использую устройство с подтверждающим модулем.

Когда я пытаюсь добавить пользователя с консолью heroku, я получил эту ошибку:

Missing host to link to! Please provide :host parameter or set default_url_options[:host] 

в тестовой среде и среде dev у меня есть следующая строка:

среды / development.rb и среды / test.rb

 config.action_mailer.default_url_options = { :host => 'localhost:3000' } 

Я не создал что-то в производственной среде.

Я попытался нажать

 config.action_mailer.default_url_options = { :host => 'mywebsitename.com' } config.action_mailer.default_url_options = { :host => 'heroku.mywebsitename.com' } 

но это тоже не работает.

Я вижу в Интернете, что это может быть связано с ActionMailer, но я не знаю, что мне нужно настроить. Большое спасибо за вашу идею!

Редакция:

Здравствуй,

Для того, чтобы не сделать мое приложение аварийным, когда я нажимаю на герою, я помещаю это в свой env / test.rb и мой env / dev.rb (не в env.rb, я думаю, это потому, что это приложение rails 3)

 config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' } 

Но когда я попытался создать пользователя в консоли heroku:

 User.create(:username => "test", :email => "[email protected]", :password => "test1234", :password_confirmation => "test1234", :confirmed_at => "2010-11-03 14:11:15.520128") 

вот ошибки, которые я получил:

 ActionView::Template::Error: Missing host to link to! Please provide :host parameter or set default_url_options[:host] /home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:473:in `url_for' /home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/url_for.rb:132:in `url_for' /home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_view/helpers/url_helper.rb:99:in `url_for' /home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:195:in `user_confirmation_url' 

EDITED (2)

Когда я печатаю журналы heroku на консоли, я получил это ==> production.log <== Так что я думаю, что когда один разворачивается на героку, он уже в производстве.

Я настраиваю env / prod.rb следующим образом:

 config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' } 

и теперь у меня это как ошибка, когда я пытаюсь создать пользователя:

 Errno::EAFNOSUPPORT: Address family not supported by protocol - socket(2) /usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `initialize' /usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `open' /usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `do_start' /usr/ruby1.8.7/lib/ruby/1.8/timeout.rb:62:in `timeout' 

Вы должны добавить это в свою environment.rb

  config.action_mailer.default_url_options = { :host => 'localhost' } 

Убедитесь, что вы сменили host на свой производственный URL и сохранили его в локальном host для разработки. Это для почтовой программы, для отправки уведомлений, таких как подтверждения и т. Д., Требуется электронная почта по умолчанию.


Вы должны проверить журналы на сервере heroku logs запускают это из консоли и сообщают вам точную ошибку.

Когда вы нажимаете на герою, вам нужно настроить файл environment.rb с помощью поддомена heroku:

 config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' } 

В зависимости от версии, это должно идти в production.rb , а не environment.rb .

В порядке,

Сначала вы должны установить жемчуг sendgrid с помощью этой командной строки:

 heroku addons:add sendgrid:free 

Затем вам просто нужно настроить свои env / dev.rb и env / prod.rb следующим образом:

окр / dev.rb

 config.action_mailer.default_url_options = { :host => 'localhost:3000' } 

окр / prod.rb

 config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' } 

Нажмите на git и heroku. Он должен работать..

Трекер Codeglot выше выполняет эту работу, но мы хотели что-то более гибкое, поэтому мы сделали это:

На Heroku мы запускаем несколько производственных сред для проведения и тестирования, поэтому нам нужно гибкое решение для файла среды production.rb.

В production.rb

 config.action_mailer.default_url_options = { :host => ENV['MAILER_URL'] } 

Затем установите переменную среды MAILER_URL для вашего приложения так, как показано ниже.

 heroku config:set MAILER_URL=my-awesome-app.herokuapp.com --app my-awesome-app 

Если вы работаете в Cedar :

  1. запускайте heroku addons:add sendgrid:free с консоли.

  2. Добавьте в приложение следующие строки в config/environments/production.rb .

,

  ActionMailer::Base.smtp_settings = { :address => 'smtp.sendgrid.net', :port => '587', :authentication => :plain, :user_name => ENV['SENDGRID_USERNAME'], :password => ENV['SENDGRID_PASSWORD'], :domain => 'heroku.com' } ActionMailer::Base.delivery_method = :smtp config.action_mailer.default_url_options = { :host => 'YOUR-DOMAIN-HERE.COM' } 

Я должен был сделать несколько вещей, чтобы заставить его работать в рабочей среде: внутри моего файла production.rb (/config/environments/production.rb) я добавил следующее:

 Rails.application.routes.default_url_options[:host] = 'myappsname.herokuapp.com' config.action_mailer.delivery_method = :smtp config.action_mailer.perform_deliveries = true config.action_mailer.raise_delivery_errors = false config.action_mailer.default :charset => "utf-8" 

Это с Rails 4 и Devise 3

Вот трюк для рассмотрения. Это упростит работу с сервером и средой, а также изменение домена, как в пользовательском домене в heroku.

Вместо жесткого кодирования имени хоста, прочитайте его из запроса. Вот пример простого приложения, которое у меня есть.

 class MyMailController < ApplicationController before_filter :set_host_from_request, only: [:create] .... private def set_host_from_request ActionMailer::Base.default_url_options = { host: request.host_with_port } end end 

в простом примере у меня есть только одно действие, создать, что приводит к отправке отправляемых писем. Вы можете добавить before_filter в application_controller.rb без исключений, чтобы всегда хранить имя хоста.

PRO:

  • всегда получайте правильное имя хоста в URL-адресах отправленных вами писем
  • Наличие параметров default_url_options на нашем промежуточном сервере, настроенных для производства , привело к отправке сообщений электронной почты для тестирования пользователей со ссылками на продукцию (они, конечно же, их клики). Нет повреждений, но очень много времени.

ПРОТИВ:

без параметров default_url_options вы не можете отправлять вручную в консоли

 #config.action_mailer.default_url_options = { :host => 'mydomain.com' } $rails console User.invite!(email: "[email protected]") ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true ...stacktrace 

Если вы видите недостатки, которые я не могу, пожалуйста, поделитесь! благодаря

Работая после стольких исследований,

  1. Не забудьте добавить default из: почтового адреса в ApplicationMailer (application_mailer.rb), как,

     class ApplicationMailer < ActionMailer::Base default from: '[email protected]' layout 'mailer' end 
  2. Добавьте приведенную ниже конфигурацию в свой файл production.rb .

     config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com' } config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'smtp.gmail.com', port: 587, domain: 'heroku.com', user_name: '[email protected]', password: 'yourgmailpassword', authentication: 'login', enable_starttls_auto: true } 
  3. Включите IMAP из своих настроек Gmail на вкладке Пересылка IMAP / POP .

  4. Разрешить менее безопасные приложения: ВКЛЮЧЕНО с https://myaccount.google.com/lesssecureapps

Теперь тебе хорошо. 🙂

Давайте будем гением компьютера.