В Heroku/разработать недостающие хозяина перейти по ссылке! Пожалуйста, укажите: параметр хоста или установите параметры url по умолчанию [: host]
Я пытаюсь нажать мое приложение на heroku. Я еще в dev. Я использую разработать с модулем подтвержденными.
когда я пытаюсь добавить пользователя с консолью heroku, я получил эту ошибку:
Missing host to link to! Please provide :host parameter or set default_url_options[:host]
в среде тестирования и разработки у меня есть следующая строка:
сред/развития.и среды/тест РБ.РБ
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 logs на консоли, я получил это ==> производство.log
я настраиваю env / prod.такой РБ:
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 gem с помощью этой командной строки:
heroku addons:add sendgrid:free
тогда вам просто нужно настроить env / dev.rb и env / prod.такой РБ:
env / dev.РБ
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
env / prod.РБ
config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }
нажмите на git и heroku. Это должно сработать..
Кодеглот anwser выше делает эту работу, но мы хотели что-то немного более гибкое, поэтому мы сделали это:
на Heroku мы запускаем несколько производственных сред для постановки и тестирования, поэтому нам нужно гибкое решение для производства.файл среды РБ.
в производстве.РБ
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
если вы используете Кедр:
выполнить
heroku addons:add sendgrid:free
из консоли.добавить следующие строки
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.РБ) я добавил следующее: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
Если вы видите недостатки, которые я не могу, пожалуйста, поделитесь! Спасибо
рабочий после стольких исследований,
Не забудьте добавить default от: mail адрес в ApplicationMailer (application_mailer.РБ) а,
class ApplicationMailer < ActionMailer::Base default from: 'yourmail@gmail.com' layout 'mailer' end
добавьте следующую конфигурацию в свой производства.РБ.
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 }
включить IMAP из настроек Gmail в пересылка IMAP / POP табуляция.
разрешить менее безопасные приложения: ON от https://myaccount.google.com/lesssecureapps
вы теперь хорошо идти. :)