Heroku / devise - Fehlender Host zum Verlinken! Bitte geben Sie Folgendes an: Host-Parameter oder setzen Sie default_url_options [: host]

177

Ich versuche meine App auf Heroku zu pushen. Ich bin immer noch in dev. Ich benutze devise mit dem bestätigbaren Modul.

Wenn ich versuche, einen Benutzer mit der Heroku-Konsole hinzuzufügen, wird folgende Fehlermeldung angezeigt:

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

In der Test- und Entwicklungsumgebung habe ich die folgende Zeile:

Umgebungen / development.rb und Umgebungen / test.rb

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

Ich habe nichts in der Produktionsumgebung eingerichtet.

Ich habe versucht, mit zu pushen

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

aber es funktioniert auch nicht ..

Ich sehe im Web, dass es mit ActionMailer zusammenhängen könnte, aber ich weiß nicht, was ich konfigurieren muss. Vielen Dank für Ihre Idee!

EDITIERT:

Hallo,

Um zu verhindern, dass meine App abstürzt, wenn ich auf Heroku drücke, habe ich dies in meine env / test.rb und meine env / dev.rb eingefügt (nicht in env.rb, ich denke, das liegt daran, dass es sich um eine Rails 3-App handelt).

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

Aber als ich versuchte, einen Benutzer in der Heroku-Konsole zu erstellen:

User.create(:username => "test", :email => "[email protected]", :password => "test1234", :password_confirmation => "test1234", :confirmed_at => "2010-11-03 14:11:15.520128")

Hier sind Fehler, die ich bekommen habe:

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'

EDITIERT (2)

Wenn ich Heroku-Protokolle auf der Konsole eingebe, bekomme ich dieses ==> Production.log <== Ich denke also, wenn man Heroku bereitstellt, ist es bereits in Produktion.

Ich konfiguriere die env / prod.rb folgendermaßen:

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

und jetzt habe ich dies als Fehler, wenn ich versuche, einen Benutzer zu erstellen:

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
quelle

Antworten:

242

Sie müssen dies zu Ihrem hinzufügen environment.rb

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

Stellen Sie sicher, dass Sie hostIhre Produktions-URL ändern und sie für die Entwicklung als lokaler Host aufbewahren. Dies ist für den Mailer, er benötigt eine Standard-E-Mail, um Benachrichtigungen wie Bestätigungen usw. zu versenden.


Sie sollten die Protokolle auf dem Heroku-Server überprüfen, die heroku logsvon der Konsole aus ausgeführt werden, und es wird Ihnen der genaue Fehler angezeigt .

Wenn Sie zu Heroku wechseln, müssen Sie die environment.rbDatei mit der Heroku-Subdomain konfigurieren :

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

Je nach Version, soll dies gehen production.rb, nicht environment.rb.

thenengah
quelle
Hallo Sam! Es tut mir leid, aber ich habe es nicht verstanden. Ich füge einfach die Zeile config.action_mailer.default_url_options = {: host => 'localhost'} in meine env.rb ein, aber meine Rails 3-App stürzt auf Heroku ab. Musste ich auch etwas auf env / prod.rb setzen? (Entschuldigung, mein Englisch ist so
lala
Musste ich meine Rails-App auch in den Produktionsmodus versetzen? Vielen Dank!
Benoitr
1
:host => 'yourapp.heroku.com' Dies sollte Ihre Domain sein. Wenn Ihre Domain beispielsweise yahoo.com ist, sollte dies der Fall sein, yahoo.heroku.comoder wenn Sie bereits benutzerdefinierte Domains eingerichtet haben, ist dies nur Ihre URLyahoo.com
thenengah
1
Danke Sam, ich finde die Lösung. Tatsache ist, dass ich das sendgrid-Addon nicht hatte und mein SMTP nicht konfiguriert hat. Vielen Dank für all Ihr Backup!
Benoitr
1
Wird es nicht sein config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com', im Gegensatz zu nur config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'?
Maudulus
37

OK,

Zuerst müssen Sie das sendgrid-Juwel mit dieser Befehlszeile installieren:

heroku addons:add sendgrid:free

Dann müssen Sie nur noch env / dev.rb und env / prod.rb wie folgt konfigurieren:

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' }

Push on Git und Heroku. Es sollte funktionieren..

benoitr
quelle
Ich erhalte diesen Fehler, wenn ich auf configuration.action_mailer in Production.rb verweise: /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 'für # <Rails :: Application :: Configuration: 0x0000000241f760> (NoMethodError)
Laran Evans
Ich bin mir nicht sicher, ob ich hier helfen kann ... Haben Sie es innerhalb des Blocks referenziert? (Website :: Application.configure do ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... end)
benoitr
6
Jetzt lautet der Befehl sendgrid heroku addons: add sendgrid: Starter (Details zur Verwendung finden Sie unter devcenter.heroku.com/articles/sendgrid )
Danny
23

Die Antwort von Codeglot oben macht den Job, aber wir wollten etwas flexibleres, also haben wir dies getan:

Auf Heroku führen wir mehrere Produktionsumgebungen zum Staging und Testen aus. Daher benötigen wir eine flexible Lösung für die Umgebungsdatei Production.rb.

In der Produktion.rb

config.action_mailer.default_url_options = { :host => ENV['MAILER_URL'] }

Stellen Sie dann die Umgebungsvariable MAILER_URL für Ihre App wie folgt ein

heroku config:set MAILER_URL=my-awesome-app.herokuapp.com --app my-awesome-app
Ross
quelle
18

Wenn Sie auf Cedar laufen :

  1. Laufen Sie heroku addons:add sendgrid:freevon Ihrer Konsole aus.

  2. Fügen Sie die folgenden Zeilen zu config/environments/production.rbIhrer App hinzu.

.

  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' }
Mike
quelle
13

Ich musste einige Dinge tun, damit es in der Produktionsumgebung funktioniert : In meiner production.rbDatei (/config/environments/production.rb) habe ich Folgendes hinzugefügt:

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"

Dies ist bei Rails 4 und Devise 3 der Fall

Maudulus
quelle
1
Diese Struktur des default_url_optionsverursachte einen Fehler, der dazu führte, dass meine vorkompilierten Assets fehlschlugen, nur zu Ihrer Information. Als ich es wieder in `= {host: 'myappsname.herokuapp.com'}` änderte, funktionierte es.
Liz
0

Die Arbeit nach so vielen Recherchen,

  1. Vergessen Sie nicht, die Standardadresse von: E-Mail- Adresse in Ihrem ApplicationMailer (application_mailer.rb) als, hinzuzufügen

    class ApplicationMailer < ActionMailer::Base
      default from: '[email protected]'
      layout 'mailer'
    end
  2. Fügen Sie die folgende Konfiguration in Ihre Produktion ein .

    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
    }
  3. Aktivieren Sie IMAP in Ihren Google Mail-Einstellungen auf der Registerkarte IMAP / POP weiterleiten.

  4. Zulassen weniger sicherer Apps: EIN unter https://myaccount.google.com/lesssecureapps

Du bist jetzt gut zu gehen. :) :)

Anshab MK
quelle