Heroku/devise - Отсутствует хост для ссылки! Укажите параметр хоста или установите default_url_options [: host]
Я пытаюсь нажать мое приложение на героку. Я все еще в 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'
Ответы
Ответ 1
Вам нужно добавить это в свой environment.rb
config.action_mailer.default_url_options = { :host => 'localhost' }
Удостоверьтесь, что вы изменили host
на ваш производственный URL-адрес и сохранили его в локальном хосте для разработки. Это для почтовой программы, для отправки уведомлений, таких как подтверждения и т.д., Требуется электронная почта по умолчанию.
Вы должны проверить журналы на сервере heroku heroku logs
запустите это из консоли, и он сообщит вам точную ошибку.
Когда вы нажимаете на герою, вам нужно настроить файл environment.rb
с помощью поддомена heroku:
config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }
В зависимости от версии это должно идти в production.rb
, а не environment.rb
.
Ответ 2
Хорошо,
Сначала вы должны установить gmail 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 и герою. Он должен работать.
Ответ 3
Codeglot anwser выше выполняет эту работу, но мы хотели что-то более гибкое, поэтому мы сделали это:
В 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
Ответ 4
Если вы используете кедр:
.
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' }
Ответ 5
Мне пришлось сделать несколько вещей, чтобы заставить его работать в среде production:
Внутри моего файла 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
Ответ 6
Вот трюк, который нужно рассмотреть. Это упростит работу с сервером и средой, а также изменение домена, как в пользовательском домене в 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 на нашем промежуточном сервере, настроенных для производства, привело к отправке сообщений электронной почты для тестирования пользователей со ссылками на продукцию (они, конечно же, их клики). Нет повреждений, но очень много времени.
CON:
без параметров 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
Если вы видите недостатки, которые я не могу, поделитесь! Благодаря
Ответ 7
Работая после стольких исследований,
-
Не забудьте добавить стандартный из: mail адрес в ApplicationMailer (application_mailer.rb) как,
class ApplicationMailer < ActionMailer::Base
default from: '[email protected]'
layout 'mailer'
end
-
Добавьте приведенную ниже конфигурацию в 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
}
-
Включите IMAP из своих настроек Gmail на вкладке Пересылка IMAP/POP.
-
Разрешить менее безопасные приложения: ВКЛ из https://myaccount.google.com/lesssecureapps
Теперь тебе хорошо.:)