Heroku / придумай - Відсутній хост для посилання на! Укажіть: параметр хоста або встановіть default_url_options [: хост]


178

Я намагаюся натиснути свою програму на heroku. Я досі в деві. Я використовую devise з підтверджуваним модулем.

Коли я намагаюся додати користувача до консолі heroku, я отримав цю помилку:

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

У тестовому та розробницькому середовищі у мене є такий рядок:

середовища / 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, але я не знаю, що я маю налаштувати. Велике спасибі за вашу ідею!

ВІДМОВЛЕНО:

Привіт,

Для того, щоб не робити збоїв у моєму додатку, коли я натискаю на heroku, я поклав це у свою env / test.rb та мою env / dev.rb (не в env.rb. Я думаю, що це тому, що це програма для рейки 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'

Відповіді:


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.


Привіт, Сем! Мені шкода, але я цього не зрозумів. Я просто додаю рядок config. Чи довелося мені щось класти і на env / prod.rb? (вибачте, моя англійська така собі ...)
benoitr

Також мені довелося переводити додаток для рейок у виробничий режим? Дякую!
benoitr

1
:host => 'yourapp.heroku.com' це має бути ваш домен. Наприклад, якщо ваш домен yahoo.com, він повинен бути yahoo.heroku.comабо якщо ви вже налаштовуєте власні домени, він буде просто вашим URLyahoo.com
thenengah

1
Дякую Сем, я знаходжу рішення. Справа в тому, що у мене не було addgrid addon і мій 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

Гаразд,

Спочатку потрібно встановити gem 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. Це має працювати ..


Я отримую цю помилку, коли я посилаюся на config.action_mailer у production.rb: /app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configuration.rb: 77: у method_missing': undefined method action_mailer 'для # <Rails:: Застосування :: Конфігурація: 0x0000000241f760> (NoMethodError)
Еванс,

Я не впевнений, що можу допомогти тут ... Ви вказали це всередині блоку? (Веб-сайт :: Application.configure do ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... кінець)
benoitr

6
тепер команда sendgrid - це heroku addons: add sendgrid: starter (переглянути деталі використання на сайті devcenter.heroku.com/articles/sendgrid )
Danny

24

Зверху кодекглот виконує цю роботу, але ми хотіли дещо гнучкішого, і ми зробили це:

У Heroku ми запускаємо кілька виробничих середовищ для постановки та тестування, тому нам потрібне гнучке рішення для файлу середовища production.rb.

У виробництві.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

Якщо ви працюєте на 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' }

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


1
Ця структура default_url_optionsспричинила помилку, яка призвела до відмови моїх попередньо складених активів, просто фіг. Коли я змінив його назад на `= {host: 'myappsname.herokuapp.com'}`, він працював.
Ліз

0

Робочий після стількох досліджень,

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

    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. Дозволити менш захищені програми: УВІМКНЕНО з https://myaccount.google.com/lesssecureapps

Тепер вам добре піти. :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.