Heroku / devise - отсутствует хост для ссылки на! Пожалуйста, предоставьте: параметр хоста или установите default_url_options [: хост]

178

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

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

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

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

environment / development.rb и environment / 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, но я не знаю, что мне нужно настроить. Большое спасибо за вашу идею!

Отредактированный:

Здравствуй,

Чтобы не вызывать сбои моего приложения, когда я нажимаю на heroku, я помещаю это в мой 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 => "test@test.com", :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'

ИЗДАНО (2)

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

Я настраиваю 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'
benoitr
источник

Ответы:

243

Вы должны добавить это к вашему environment.rb

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

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


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

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

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

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

thenengah
источник
Привет Сэм! Извините, но я не понял. Я просто добавляю строку config.action_mailer.default_url_options = {: host => 'localhost'} в мой env.rb, но мое приложение rails 3 падает на heroku. Должен ли я что-то положить в env / prod.rb? (извините, мой английский так себе ...)
benoitr
Кроме того, я должен был поместить свое приложение рельсов в производственный режим? Спасибо!
benoitr
1
:host => 'yourapp.heroku.com' это должен быть ваш домен. Например, если ваш домен yahoo.com, то оно должно быть yahoo.heroku.comили , если вы уже настроили пользовательские домены это будет просто свой адресyahoo.com
thenengah
1
Спасибо Сэм, я нахожу решение. Дело в том, что у меня не было аддона sendgrid и мой smtp не настроен. Большое спасибо за вашу резервную копию!
benoitr
1
Разве это не будет config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com', в отличие от просто config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'?
maudulus
37

В порядке,

Сначала вы должны установить гем 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' }

Нажимаем на мерзавца и героку. Он должен работать..

benoitr
источник
Я получаю эту ошибку, когда ссылаюсь на config.action_mailer в production.rb: /app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configuration.rb: 77: in method_missing': undefined method action_mailer 'для # <Rails:: Application :: Configuration: 0x0000000241f760> (NoMethodError)
Ларан Эванс
Я не уверен, что могу помочь здесь ... Вы ссылались на это внутри блока? (Website :: Application.configure do ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... end)
benoitr
6
теперь команда sendgrid - это дополнения heroku: добавьте sendgrid: starter (подробности об использовании см. на devcenter.heroku.com/articles/sendgrid )
Дэнни,
24

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

В Heroku для запуска и тестирования мы используем несколько производственных сред, поэтому нам необходимо гибкое решение для файла среды 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
Росс
источник
18

Если вы работаете на кедре :

  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' }
Майк
источник
13

Мне пришлось сделать несколько вещей, чтобы заставить его работать в производственной среде: Внутри моего 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

maudulus
источник
1
Эта структура default_url_optionsвызвала ошибку, из-за которой мои прекомпилируемые ресурсы перестали работать, просто к вашему сведению. Когда я изменил его обратно на `= {host: 'myappsname.herokuapp.com'}`, это сработало.
Лиз
0

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

  1. Не забудьте добавить адрес по умолчанию из: mail address в ваш ApplicationMailer (application_mailer.rb) как,

    class ApplicationMailer < ActionMailer::Base
      default from: 'yourmail@gmail.com'
      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:            'yourmail@gmail.com',
      password:             'yourgmailpassword',
      authentication:       'login',
      enable_starttls_auto: true
    }
  3. Включите IMAP в настройках Gmail на вкладке Пересылка IMAP / POP .

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

Теперь ты в порядке. :)

Аншаб МК
источник