Pracuję w Google od około 90 minut i wciąż nie mam na to odpowiedzi. Gdzie mam ustawić default_url_options
? Ustawiłem już tę opcję, config.action_mailer.default_url_options
aby rozwiązać ten sam błąd w innym miejscu, ale teraz pojawia się ten błąd, gdy próbuję użyć pomocnika adresu URL w specyfikacji RSpec. Nie mam pojęcia, gdzie oczekuje się ustawienia opcji default_url_options.
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)>'
Ten kod nie ma nic wspólnego z wiadomościami e-mail / ActionMailer, po prostu potrzebuje adresu URL zamiast ścieżki.
Jakieś pomysły?
ruby-on-rails
rspec
d11wtq
źródło
źródło
Odpowiedzi:
Musisz dodać następujący wiersz w każdym środowisku:
config.action_mailer.default_url_options = { :host => "yourhost" }
W ten sposób może działać we wszystkich środowiskach i może różnić się w zależności od środowiska. Na przykład:
development.rb
test.rb
produkcja.rb
źródło
default_url_options Rails.application.config.action_mailer.default_url_options
i toGdzieś w
routes.rb
:)źródło
listing_url(listing, :host => "whatever.com")
.config.domain = 'staging.myapp.com'
(oczywiście zastępuję poprawną nazwę domeny dla każdej env). Wówczasroutes.rb
jestem darmowydefault_url_options host: Rails.application.config.domain
i będzie działać w każdym środowisku. Nie ma za co.default_url_options Rails.application.config.action_mailer.default_url_options
.Host powinien zostać określony w pliku konfiguracyjnym każdego środowiska. Na przykład:
Zobacz to pytanie i to pytanie .
źródło
Ustaw
default_url_options
Aby użyćaction_mailer.default_url_options
.W każdym z plikami środowiska (np
development.rb
,production.rb
etc.) można określićdefault_url_options
użyć doaction_mailer
:Nie są one jednak ustawione dla
MyApp:Application.default_url_options
:Dlatego ten błąd pojawia się w czymkolwiek poza
ActionMailer
.Można ustawić aplikacji
default_url_options
do korzystania co określono dlaaction_mailer
w odpowiednim pliku środowiska (development.rb
,production.rb
, itd.).Aby zachować SUCHOŚĆ, jak to możliwe, zrób to w swoim
config/environment.rb
pliku, więc musisz to zrobić tylko raz:Teraz, gdy uruchomisz aplikację, całe aplikacje
default_url_options
będą pasować doaction_mailer.default_url_options
:Czapka dla @pduersteler za prowadzenie mnie tą ścieżką.
źródło
config/environment.rb
opisem była kluczem do uruchomienia mojego programu pocztowego w konsoli. Dziękuję Ci!Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options
przypadku Railsów 5.2+Gdy użyjesz dowolnej
listing_url
metody, zostanie zwrócony pełny adres URL (normalnie nie względny). Właśnie dlatego szyny proszą cię o hosta, aby obliczyć cały adres URL.Jak rozpoznać szynę hosta? Możesz to zrobić na kilka sposobów:
1.Dodanie tej opcji do każdego środowiska:
UWAGA: Jeśli pracujesz w silniku szynowym, pamiętaj, aby zrobić to samo dla aplikacji-manekina w ramach testów silnika:
path_to_your_engine/test/dummy/config/environments/*
ponieważ podczas testowania silnika testowane są szyny.2. Dodaj opcję hosta do metody foo_url w następujący sposób:
3.Nie wysyłaj hosta z opcją
:only_path to true
.IMHO Nie widzę sensu w tym, ponieważ w tym przypadku użyłbym
listing_path
metodyźródło
Zabawne, że to ustawienie
config.action_mailer.default_url_options
mi nie pomaga. Poza tym bawienie się ustawieniami niezależnymi od środowiska w miejscach, w których czułem, że nie należy, nie było dla mnie satysfakcjonujące. Dodatkowo chciałem rozwiązania, które zadziała podczas generowania adresów URL w pracownikach sidekiq / resque.Moje dotychczasowe podejście, które dotyczy
config/environments/{development, production}.rb
:Działa to dla mnie w szynach> = 3.2.x.
źródło
config/environment.rb
pliku, aby to zrobić. I dodałem szczegółową odpowiedź: stackoverflow.com/a/48529627/293280 Dzięki za skierowanie mnie w tym kierunku.Rails.application.routes.default_url_options[:host]= 'localhost:3000'
W developemnt.rb / test.rb może być bardziej zwięzłe, jak następuje:
źródło
Zawsze możesz przekazać hosta jako parametr do pomocnika adresu URL:
źródło
listing_url(listing, host: request.host, port: 3000)
Możesz ustawić domyślne opcje adresu URL w kontrolerze aplikacji:
http://guides.rubyonrails.org/action_controller_overview.html#default_url_options
źródło
Miałem ten sam błąd. Wszystko napisałem poprawnie, w tym Listing 10.13 z samouczka.
oczywiście z „example.com” zastąpiony moim adresem URL serwera.
W samouczku opisałem to w następujący sposób:
Więc dla mnie odpowiedzią było wyłączenie i ponowne włączenie serwera.
źródło
przejdź do config / environment / test.rb
Rails.application.routes.default_url_options [: host] = 'localhost: 3000'
źródło
na wypadek, gdyby ktoś znalazł to wyszukiwanie błędów związanych z ActiveStorage:
jeśli masz działanie kontrolera, w którym chcesz wygenerować adresy URL do wysyłania itp. za pomocą lokalnej usługi dyskowej (najprawdopodobniej w środowisku testowym), musisz to zrobić
include ActiveStorage::SetCurrent
w kontrolerze, aby umożliwićblob.service_url_for_direct_upload
poprawne działanie.źródło
Dodanie default_url w trasach nie jest właściwym rozwiązaniem, chociaż działa w niektórych przypadkach.
Musisz ustawić default_url w każdym środowisku (programowanie, testowanie, produkcja).
Musisz wprowadzić te zmiany.
źródło
Rozwiązałem problem, konfigurując environment.rb jako
YourApp :: Application.default_url_options = YourApp :: Application.config.action_mailer.default_url_options
Musisz ustawić default_url_options dla mailera akcji dla każdego środowiska, takiego jak programowanie, testowanie, przemieszczanie i produkcja itp.
Odniesienie: brak hosta do linku! Podaj: parametr hosta lub ustaw opcje default_url_options [: host]
źródło
Powyższa odpowiedź nie działała dla mnie, a przynajmniej nie tak, jak chciałem. Uświadomiłem sobie
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
po zainstalowaniu urządzenia. Mam nadzieję, że pomoże to komuś z tym samym problemem.źródło