Heroku / devise-отсутствует хост для ссылки! Укажите: параметр host или задайте параметры url по умолчанию [: host]

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

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

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

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

окружающая среда / развитие.и среды/тест РБ.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 на консоли, я получил это ==> производство.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'

7 ответов


вам нужно добавить это в свой environment.rb

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

убедитесь, что вы изменить host к вашему url продукции и держит его localhost для развития. Это для почтовика, ему нужна электронная почта по умолчанию для отправки уведомлений, таких как подтверждения и т. д...


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

когда вы нажимаете на Heroku, вам нужно настроить С поддомен 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 вот так:

env / dev.rb

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

env / prod.rb

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

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


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

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

в производстве.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

если вы используете Кедр:

  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 file (/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"

С рельсы 4 и разработать 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

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

PRO:

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

CON:

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

#config.action_mailer.default_url_options = { :host => 'mydomain.com' }
$rails console
  User.invite!(email: "ceo@example.com")
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 from: mail адрес в ApplicationMailer (application_mailer.rb) as,

    class ApplicationMailer < ActionMailer::Base
      default from: 'yourmail@gmail.com'
      layout 'mailer'
    end
    
  2. добавьте приведенную ниже конфигурацию в свой производства.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. разрешить менее безопасные приложения: ON от https://myaccount.google.com/lesssecureapps

теперь вы хорошо идти. :)