Ich google jetzt seit ungefähr 90 Minuten und habe immer noch keine Antwort darauf. Wo setze ich default_url_options
? Ich habe es bereits festgelegt config.action_mailer.default_url_options
, um denselben Fehler an anderer Stelle zu beheben, aber jetzt wird dieser Fehler angezeigt, wenn ich versuche, einen URL-Helfer in einer RSpec-Spezifikation zu verwenden. Ich habe keine Ahnung, wo erwartet wird, dass default_url_options gesetzt werden.
Failure/Error: listing_url(listing).should match(/\/\d+-\w+$/)
RuntimeError:
Missing host to link to! Please provide :host parameter or set default_url_options[:host]
# ./spec/routing/listing_routing_spec.rb:9:in `block (3 levels) in <top (required)>'
Dieser Code hat nichts mit E-Mails / ActionMailer zu tun. Er benötigt lediglich eine URL anstelle eines Pfads.
Irgendwelche Ideen?
ruby-on-rails
rspec
d11wtq
quelle
quelle
Antworten:
Sie müssen in jeder Umgebung die folgende Zeile hinzufügen:
config.action_mailer.default_url_options = { :host => "yourhost" }
Auf diese Weise kann es in allen Umgebungen funktionieren und von Umgebung zu Umgebung unterschiedlich sein. Beispielsweise:
development.rb
test.rb
Produktion.rb
quelle
default_url_options Rails.application.config.action_mailer.default_url_options
und das hat den Trick gemacht, wie von einem anderen Kommentator vorgeschlagenIrgendwo in
routes.rb
:)quelle
listing_url(listing, :host => "whatever.com")
.config.domain = 'staging.myapp.com'
(Ersetzen Sie natürlich jede Umgebung durch einen korrekten Domänennamen). Dannroutes.rb
bin ich frei zu benutzendefault_url_options host: Rails.application.config.domain
und es wird in jeder Umgebung funktionieren. Bitte.default_url_options Rails.application.config.action_mailer.default_url_options
.Der Host sollte in der Konfigurationsdatei jeder Umgebung angegeben werden. Z.B:
Siehe diese Frage und diese Frage .
quelle
Stellen Sie
default_url_options
Ihre einaction_mailer.default_url_options
.In jedem Ihrer Umgebung Dateien (zB
development.rb
,production.rb
usw.) können Sie die angeben ,default_url_options
zu verwenden füraction_mailer
:Diese sind jedoch nicht festgelegt für
MyApp:Application.default_url_options
:Das ist der Grund, warum Sie diesen Fehler in irgendetwas außerhalb von bekommen
ActionMailer
.Sie können festlegen, dass Ihre Anwendungen das
default_url_options
verwenden, wofür Sieaction_mailer
in der entsprechenden Umgebungsdatei definiert haben (development.rb
,production.rb
usw.).Um die Dinge so trocken wie möglich zu halten, führen Sie dies in Ihrer
config/environment.rb
Datei aus, sodass Sie dies nur einmal tun müssen:Wenn Sie jetzt Ihre App starten, entspricht Ihre gesamte Anwendung
default_url_options
Ihreraction_mailer.default_url_options
:Hutspitze an @pduersteler, der mich auf diesen Weg geführt hat.
quelle
config/environment.rb
wie beschrieben war der Schlüssel, damit mein Mailer in der Konsole funktioniert. Danke dir!Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options
für Rails 5.2+Wenn Sie welche verwenden
listing_url
Methode verwenden, wird die vollständige URL zurückgegeben (nicht wie gewohnt eine relative). Aus diesem Grund werden Sie von Rails nach dem Host gefragt, um die gesamte URL zu berechnen.Wie können Sie Rails dem Host sagen? Sie können dies auf verschiedene Arten tun:
1. Hinzufügen dieser Option zu jeder Umgebung:
HINWEIS: Wenn Sie in einem Schienenmotor arbeiten, denken Sie daran, dasselbe für Ihre Dummy-App in den Motortests zu tun:
path_to_your_engine/test/dummy/config/environments/*
testen, ist es das, gegen das Schienen testen.2. Fügen Sie die Host-Option wie folgt zur foo_url-Methode hinzu:
3. Geben Sie den Host nicht mit der Option aus
:only_path to true
.IMHO sehe ich den Punkt in diesem Fall nicht, weil ich in diesem Fall das verwenden würde
listing_path
Methode verwenden würdequelle
Lustige Sache, diese Einstellung
config.action_mailer.default_url_options
hilft mir nicht. Außerdem war es für mich nicht zufriedenstellend, an Orten mit umweltunabhängigen Einstellungen herumzuspielen, von denen ich glaubte, dass sie nicht dazu gehören. Außerdem wollte ich eine Lösung, die beim Generieren von URLs in Sidekiq / Resque-Workern funktioniert.Mein bisheriger Ansatz, der Folgendes betrifft
config/environments/{development, production}.rb
:Dies funktioniert bei mir in Schienen> = 3.2.x.
quelle
config/environment.rb
Datei einfügen. Und eine Antwort, die ins Detail geht: stackoverflow.com/a/48529627/293280 Vielen Dank, dass Sie mich in diese Richtung weisen.Rails.application.routes.default_url_options[:host]= 'localhost:3000'
In der Entwicklung.rb / test.rb kann wie folgt präziser sein:
quelle
Sie können den Host jederzeit als Parameter an den URL-Helfer übergeben:
quelle
listing_url(listing, host: request.host, port: 3000)
Sie können Standard-URL-Optionen im Application Controller festlegen:
http://guides.rubyonrails.org/action_controller_overview.html#default_url_options
quelle
Ich hatte den gleichen Fehler. Ich hatte alles richtig geschrieben, einschließlich Listing 10.13 aus dem Tutorial.
offensichtlich mit "example.com" ersetzt durch meine Server-URL.
Was ich im Tutorial beschönigt hatte, war diese Zeile:
Die Antwort für mich war also, den Server aus- und wieder einzuschalten.
quelle
Gehen Sie zu config / environment / test.rb.
Rails.application.routes.default_url_options [: host] = 'localhost: 3000'
quelle
Nur für den Fall, dass jemand diese Suche nach Fehlern in Bezug auf ActiveStorage findet:
Wenn Sie eine Controller-Aktion haben, bei der Sie Upload-URLs usw. mit dem lokalen Disc-Service generieren möchten (höchstwahrscheinlich in einer Testumgebung), müssen Sie dies
include ActiveStorage::SetCurrent
im Controller tun, damit Sieblob.service_url_for_direct_upload
ordnungsgemäß arbeiten können.quelle
Das Hinzufügen der default_url in Routen ist jedoch nicht die richtige Lösung, funktioniert jedoch in einigen Fällen.
Sie müssen die default_url in jeder Umgebung festlegen (Entwicklung, Test, Produktion).
Sie müssen diese Änderungen vornehmen.
quelle
Ich habe das Problem gelöst, indem ich environment.rb als konfiguriert habe
YourApp :: Application.default_url_options = YourApp :: Application.config.action_mailer.default_url_options
Sie müssen default_url_options für Action Mailer für jede Umgebung wie Entwicklung, Test, Staging und Produktion usw. festlegen.
Referenz: Fehlender Host zum Verknüpfen! Bitte geben Sie Folgendes an: Host-Parameter oder setzen Sie default_url_options [: host]
quelle
Die obige Antwort hat bei mir nicht funktioniert, zumindest nicht so, wie ich es wollte. Ich erkannte
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
nach der Installation von Gerät. Hoffe, es wird jemandem mit dem gleichen Problem helfen.quelle