webentwicklung-frage-antwort-db.com.de

Heroku / devise - Fehlender Host zum Verlinken! Bitte geben Sie an: Host parameter oder set default_url_options [: Host]

Ich versuche, meine App auf Heroku zu pushen. Ich bin noch in dev Ich benutze das Gerät mit dem bestätigbaren Modul.

Beim Versuch, einen Benutzer mit der Heroku-Konsole hinzuzufügen, ist folgender Fehler aufgetreten:

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 Push

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 Internet, dass es mit ActionMailer zu tun haben könnte, weiß aber nicht, was ich konfigurieren muss. Vielen Dank für Ihre Idee!

BEARBEITET:

Hallo,

Um meine App nicht zum Absturz zu bringen, wenn ich auf Heroku drücke, habe ich dies in mein env/test.rb und mein env/dev.rb eingefügt (nicht in env.rb). Ich denke, das liegt daran, dass es ein Rails 3 App)

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'

BEARBEITET (2)

Wenn ich Heroku-Logs auf der Konsole eingebe, erhalte ich ==> production.log <== Ich denke, wenn man Heroku einsetzt, ist es bereits in Produktion.

Ich konfiguriere die env/prod.rb wie folgt:

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'
174
benoitr

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

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

Stellen Sie sicher, dass Sie Host in Ihre Produktions-URL ändern und diese für die Entwicklung als localhost speichern. 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 heroku logs Überprüfen, die von der Konsole ausgeführt werden, und es wird Ihnen den genauen Fehler mitteilen.

Wenn Sie zu Heroku wechseln, müssen Sie die Datei environment.rb Mit der Heroku-Unterdomäne konfigurieren:

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

Je nach Version sollte dies in production.rb Und nicht in environment.rb Erfolgen.

237
thenengah

Okay,

Zuerst musst du das sendgrid gem mit dieser Kommandozeile installieren:

heroku addons:add sendgrid:free

Dann müssen Sie nur noch Ihre 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' }

Schieben Sie auf Git und Heroku. Es sollte funktionieren..

37
benoitr

Codeglots Antwort oben erledigt den Job, aber wir wollten etwas flexibleres, also haben wir das gemacht:

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 production.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
22
Ross

Wenn Sie mit Cedar :

  1. führen Sie heroku addons:add sendgrid:free von Ihrer Konsole aus.

  2. Fügen Sie in Ihrer App die folgenden Zeilen zu config/environments/production.rb 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' }
18
Mike

Ich musste einige Dinge tun, damit es in der Produktions- Umgebung funktioniert: Innerhalb meines production.rb file (/config/environments/production.rb) Ich habe 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 mit Rails 4 und Devise

13
maudulus

Hier ist ein Trick zu beachten. Dies erleichtert das Wechseln von Server und Umgebung sowie das Ändern der Domäne wie in einer benutzerdefinierten Domäne bei heroku.

Lesen Sie den Hostnamen aus der Anforderung, anstatt ihn fest zu codieren. Hier ist ein Beispiel einer einfachen App, die ich habe.

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

im einfachen Beispiel muss ich nur eine Aktion erstellen, die dazu führt, dass E-Mails gesendet werden. Sie können den before_filter in application_controller.rb hinzufügen, ohne die Ausschlüsse zu verwenden, damit immer der Hostname gespeichert wird.

PROFI:

  • erhalten Sie immer den richtigen Hostnamen in der URL der E-Mails, die Sie senden
  • Wenn die default_url_options auf unserem Staging-Server für Produktion konfiguriert sind, werden E-Mails an Testbenutzer mit Links zur Produktion gesendet (sie klicken natürlich darauf). Kein Schaden, aber sehr zeitaufwendig.

CON:

ohne die default_url_options können Sie nicht manuell in der Konsole senden

#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

Wenn Sie Nachteile sehen, die ich nicht sehen kann, teilen Sie sie bitte mit! Vielen Dank

7
oma

Der Arbeitende nach so vielen Nachforschungen,

  1. Vergessen Sie nicht, die Standardadresse von: mail in Ihre ApplicationMailer (application_mailer.rb) als einzufügen.

    class ApplicationMailer < ActionMailer::Base
      default from: '[email protected]'
      layout 'mailer'
    end
    
  2. Fügen Sie die folgende Konfiguration in Ihre production.rb 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 Weiterleitung von IMAP/POP .

  4. Weniger sichere Apps zulassen: ON von https://myaccount.google.com/lesssecureapps

Sie können jetzt loslegen. :)

0
Anshab M K