He estado buscando en Google durante unos 90 minutos y todavía no tengo una respuesta para esto. ¿Dónde configuro default_url_options
? Ya lo configuré para config.action_mailer.default_url_options
resolver este mismo error en otro lugar, pero ahora recibo este error al intentar usar un ayudante de URL dentro de una especificación RSpec. No tengo idea de dónde espera que se establezcan 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)>'
Este código no tiene nada que ver con los correos electrónicos / ActionMailer, simplemente necesita una URL en lugar de una ruta.
¿Algunas ideas?
ruby-on-rails
rspec
d11wtq
fuente
fuente
Respuestas:
Debe agregar la siguiente línea en cada entorno:
config.action_mailer.default_url_options = { :host => "yourhost" }
De esa manera, puede funcionar en todos los entornos y podría ser diferente de un entorno a otro. Por ejemplo:
desarrollo.rb
test.rb
production.rb
fuente
default_url_options Rails.application.config.action_mailer.default_url_options
embargo, se agregó y eso funcionó, como lo sugirió otro comentaristaEn algún lugar en
routes.rb
:)fuente
listing_url(listing, :host => "whatever.com")
.config.domain = 'staging.myapp.com'
(por supuesto, sustituya en un nombre de dominio correcto para cada env). Luegoroutes.rb
, soy libre de usardefault_url_options host: Rails.application.config.domain
y funcionará en cualquier entorno. De nada.default_url_options Rails.application.config.action_mailer.default_url_options
.El host debe especificarse en el archivo de configuración de cada entorno. P.ej:
Ver esta pregunta y esta pregunta .
fuente
Establecer
default_url_options
para usar suaction_mailer.default_url_options
.En cada uno de los archivos de su entorno (p
development.rb
. Ej .production.rb
, Etc.) puede especificar eldefault_url_options
uso paraaction_mailer
:Sin embargo, estos no están configurados para
MyApp:Application.default_url_options
:Es por eso que está recibiendo este error de fuera de nada
ActionMailer
.Usted puede configurar su aplicación es
default_url_options
usar lo que definió paraaction_mailer
el archivo de entorno apropiado (development.rb
,production.rb
, etc.).Para mantener las cosas lo más SECAS posible, haga esto en su
config/environment.rb
archivo para que solo tenga que hacer esto una vez:Ahora, cuando inicie su aplicación, toda su aplicación
default_url_options
coincidirá con suaction_mailer.default_url_options
:Felicitaciones a @pduersteler por guiarme por este camino.
fuente
config/environment.rb
como lo describió fue la clave para que mi correo funcione en la consola. ¡Gracias!Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options
para Rails 5.2+Cuando utilice cualquier
listing_url
método, se devolverá la URL completa (no una relativa como es normal). Es por eso que rails le está pidiendo el host, para calcular la URL completa.¿Cómo puedes distinguir los carriles del anfitrión? Puedes hacerlo de varias maneras:
1.Agregando esta opción a cada entorno:
NOTA: Si está trabajando dentro de un motor de rieles, recuerde hacer lo mismo para su aplicación ficticia dentro de las pruebas del motor:
path_to_your_engine/test/dummy/config/environments/*
porque cuando prueba el motor es contra lo que está probando los rieles.2. Agregue la opción de host al método foo_url de esta manera:
3.No envíe el host con la opción
:only_path to true
.En mi humilde opinión, no veo el punto en este caso porque en este caso usaría el
listing_path
métodofuente
Cosa curiosa, esa configuración
config.action_mailer.default_url_options
no me ayuda. Además, jugar con configuraciones independientes del entorno en lugares que sentí que no pertenecían no fue satisfactorio para mí. Además, quería una solución que funcionara al generar URL en sidekiq / resque trabajadores.Mi enfoque hasta ahora, que entra en
config/environments/{development, production}.rb
:Esto funciona para mí en rieles> = 3.2.x.
fuente
config/environment.rb
archivo para hacer esto. Y agregó la respuesta que entra en detalles: stackoverflow.com/a/48529627/293280 Gracias por señalarme en esta dirección.Rails.application.routes.default_url_options[:host]= 'localhost:3000'
En el desarrollo.rb / test.rb, puede ser más conciso de la siguiente manera:
fuente
Siempre puede pasar el host como parámetro al ayudante de URL:
fuente
listing_url(listing, host: request.host, port: 3000)
Puede configurar las opciones de URL predeterminadas en el controlador de la aplicación:
http://guides.rubyonrails.org/action_controller_overview.html#default_url_options
fuente
Tuve este mismo error. Tenía todo escrito correctamente, incluido el Listado 10.13 del tutorial.
obviamente con "example.com" reemplazado con la url de mi servidor.
Lo que había pasado por alto en el tutorial fue esta línea:
Entonces la respuesta para mí fue apagar y volver a encender el servidor.
fuente
vaya a config / entornos / test.rb
Rails.application.routes.default_url_options [: host] = 'localhost: 3000'
fuente
por si alguien encuentra esto buscando errores relacionados con ActiveStorage:
Si tiene una acción de controlador donde desea generar URL de carga, etc. con el servicio de disco local (muy probablemente en un entorno de prueba), debe hacerlo
include ActiveStorage::SetCurrent
en el controlador para permitirblob.service_url_for_direct_upload
que funcione correctamente.fuente
Agregar el default_url en las rutas no es la solución correcta, aunque funciona para algunos casos.
Debe establecer default_url en cada entorno (desarrollo, prueba, producción).
Necesitas hacer estos cambios.
fuente
Resolví el problema configurando environment.rb como
YourApp :: Application.default_url_options = YourApp :: Application.config.action_mailer.default_url_options
Debe establecer default_url_options para la aplicación de correo de acción en cada entorno, como desarrollo, prueba, puesta en escena y producción, etc.
Referencia: ¡ Falta un host para vincular! Proporcione: parámetro de host o establezca default_url_options [: host]
fuente
La respuesta anterior no funcionó para mí, al menos no como quería. Me di cuenta
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
después de instalar el dispositivo. Espero que ayude a alguien con el mismo problema.fuente