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:
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!
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'
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'
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.
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..
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
Wenn Sie mit Cedar :
führen Sie heroku addons:add sendgrid:free
von Ihrer Konsole aus.
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' }
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
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:
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
Der Arbeitende nach so vielen Nachforschungen,
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
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
}
Aktivieren Sie IMAP in Ihren Google Mail-Einstellungen auf der Registerkarte Weiterleitung von IMAP/POP .
Weniger sichere Apps zulassen: ON von https://myaccount.google.com/lesssecureapps
Sie können jetzt loslegen. :)