Brak hosta do linkowania! Proszę podać: parametr host lub ustawić domyślne opcje url [: host]

[3]}googluję od około 90 minut i nadal nie mam na to odpowiedzi. Gdzie ustawić default_url_options? Ustawiłem go już na config.action_mailer.default_url_options, aby rozwiązać ten sam błąd gdzie indziej, ale teraz dostaję ten błąd, gdy próbuję użyć pomocnika URL wewnątrz specyfikacji RSpec. Nie mam pojęcia, gdzie oczekuje ustawienia 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 emailami/ActionMailer, po prostu potrzebuje adresu URL zamiast ścieżki.

Jakieś pomysły?
Author: d11wtq, 2011-08-28

10 answers

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 być różny od środowiska do środowiska. Na przykład:

Rozwój.rb

config.action_mailer.default_url_options = { :host => "dev.yourhost.com" }

Test.rb

config.action_mailer.default_url_options = { :host => "test.yourhost.com" }

Produkcja.rb

config.action_mailer.default_url_options = { :host => "www.yourhost.com" }
 219
Author: Carlos Castillo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-23 16:21:54
Your::Application.routes.draw do
  default_url_options :host => "example.com"

  # ... snip ...
end

Gdzieś w routes.rb :)

 58
Author: d11wtq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-31 14:31:30

Host powinien być określony w pliku konfiguracyjnym każdego środowiska. Eg:

config/environments/development.rb

Zobacz to pytanie i to pytanie .

 34
Author: nickh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-31 14:31:10

Gdy użyjesz dowolnej metody listing_url, zostanie zwrócony pełny adres URL(nie względny jak zwykle). Dlatego rails pyta Cię o hosta, aby obliczyć cały adres URL.

Jak odróżnić rails ' a od gospodarza? Można to zrobić na kilka sposobów:

1.Dodanie tej opcji do każdego środowiska:

[/config/development.rb]
config.action_mailer.default_url_options = { host: "localhost:3000" }
[/config/test.rb]
config.action_mailer.default_url_options = { host: "localhost:3000" }
[/config/production.rb]
config.action_mailer.default_url_options = { host: "www.example.com" }

Uwaga: jeśli pracujesz wewnątrz rails engine pamiętaj, aby zrobić to samo dla swojej atrapy aplikacji wewnątrz testów silnika: path_to_your_engine/test/dummy/config/environments/* ponieważ podczas testowania silnik to z czym rails testuje.

2.Dodaj opcję host do metody foo_url w następujący sposób:

listing_url(listing, host: request.host) # => 'http://localhost:3000/listings/1'

3.Nie wypisuje hosta z opcją :only_path to true.

listing_url(listing, only_path: true ) # => '/listings/1'   

IMHO nie widzę w tym sensu, bo w tym przypadku użyłbym metody listing_path

 24
Author: ivanxuu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-21 08:43:59

Zabawne, to ustawienie mi nie pomaga. Ponadto, mieszanie się z ustawieniami niezależnymi od środowiska w miejscach, w których czułem, że nie należy do nich, nie było dla mnie satysfakcjonujące. Dodatkowo potrzebowałem rozwiązania, które zadziałało podczas generowania adresów URL w robotnikach sidekiq/resque.

Moje dotychczasowe podejście, które idzie w config/environments/{development, production}.rb:

MyApp::Application.configure do
    # Stuff omitted...

    config.action_mailer.default_url_options = {
      # Set things here as usual
    }
end

MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options

To mi działa w rails > = 3.2.x.

 14
Author: pduersteler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-10 20:04:19

Ustaw default_url_options, Aby używać swojego action_mailer.default_url_options.

W każdym z plików środowiska (np. development.rb, production.rb, itd.) możesz określić default_url_options do użycia dla action_mailer:

config.action_mailer.default_url_options = { host: 'lvh.me', port: '3000' }

Jednak nie są one ustawione dla MyApp:Application.default_url_options:

$ MyApp::Application.config.action_mailer.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}

$ MyApp::Application.default_url_options
#=> {}

Dlatego dostajesz ten błąd we wszystkim poza ActionMailer.

Możesz ustawić default_url_options swoją aplikację tak, aby używała tego, co zdefiniowałeś dla action_mailer w odpowiednim pliku środowiskowym (development.rb, production.rb, itd.).

Aby rzeczy były jak najbardziej suche, zrób to w pliku config/environment.rb, więc musisz to zrobić tylko raz:

# Initialize the rails application
MyApp::Application.initialize!

# Set the default host and port to be the same as Action Mailer.
MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options

Teraz po uruchomieniu aplikacji, cała aplikacja default_url_options będzie pasować do twojej action_mailer.default_url_options:

$ MyApp::Application.config.action_mailer.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}

$ MyApp::Application.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}

Hat tip to @pduersteler za poprowadzenie mnie tą ścieżką.

 12
Author: Joshua Pinter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-30 20:03:46

Zawsze możesz przekazać host jako parametr do helpera URL:

listing_url(listing, host: request.host)
 6
Author: Undistraction,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 20:54:16

Możesz ustawić domyślne opcje url w kontrolerze aplikacji:

class ApplicationController < ActionController::Base
  def default_url_options
    {:locale => I18n.locale}
  end
end

Http://guides.rubyonrails.org/action_controller_overview.html#default_url_options

 3
Author: RicRoberts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-19 15:55:41

Miałem ten sam błąd. Miałem wszystko napisane poprawnie, w tym Listing 10.13 z samouczka.

Rails.application.configure do
.
.
.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delevery_method :test
host = 'example.com'
config.action_mailer.default_url_options = { host: host }
.
.
.
end

Oczywiście z "example.com" zastąpiony adresem URL serwera.

To co przeczytałem w tutorialu to ta linijka:

Po ponownym uruchomieniu serwera programistycznego w celu aktywacji konfiguracji...

Więc odpowiedzią dla mnie było wyłączenie serwera i ponowne włączenie.

 1
Author: Okomikeruko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 15:41:59

Dodanie default_url w trasach nie jest właściwym rozwiązaniem, chociaż w niektórych przypadkach działa.

Musisz ustawić default_url w każdym środowisku (rozwój, test, produkcja).

Musisz wprowadzić te zmiany.
    config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

 config/environments/test.rb
      config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

  config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'
 0
Author: Prabhakar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-04 11:58:20