Je cherche sur Google depuis environ 90 minutes maintenant et je n'ai toujours pas de réponse à cela. Où dois-je installer default_url_options
? Je l'ai déjà configuré pour config.action_mailer.default_url_options
résoudre ce même bogue ailleurs, mais maintenant j'obtiens cette erreur en essayant d'utiliser un assistant d'URL dans une spécification RSpec. Je n'ai aucune idée de l'endroit où il s'attend à ce que default_url_options soit défini.
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)>'
Ce code n'a rien à voir avec les emails / ActionMailer, il se trouve qu'il a juste besoin d'une URL au lieu d'un chemin.
Des idées?
ruby-on-rails
rspec
d11wtq
la source
la source
Réponses:
Vous devez ajouter la ligne suivante dans chaque environnement:
config.action_mailer.default_url_options = { :host => "yourhost" }
De cette façon, il peut fonctionner dans tous les environnements et peut être différent d'un environnement à l'autre. Par exemple:
development.rb
test.rb
production.rb
la source
default_url_options Rails.application.config.action_mailer.default_url_options
cependant et cela a fait l'affaire, comme suggéré par un autre commentateurQuelque part dans
routes.rb
:)la source
listing_url(listing, :host => "whatever.com")
.config.domain = 'staging.myapp.com'
(bien sûr, remplacez-la par un nom de domaine correct pour chaque env). Ensuite,routes.rb
je suis libre d'utiliserdefault_url_options host: Rails.application.config.domain
et cela fonctionnera dans n'importe quel environnement. De rien.default_url_options Rails.application.config.action_mailer.default_url_options
.L'hôte doit être spécifié dans le fichier de configuration de chaque environnement. Par exemple:
Voir cette question et cette question .
la source
Préparez-vous
default_url_options
à utiliser votreaction_mailer.default_url_options
.Dans chacun de vos fichiers d'environnement (par exemple
development.rb
,production.rb
, etc.) , vous pouvez spécifier l'default_url_options
utiliser pouraction_mailer
:Cependant, ils ne sont pas définis pour
MyApp:Application.default_url_options
:C'est pourquoi vous obtenez cette erreur en dehors de
ActionMailer
.Vous pouvez configurer votre application est
default_url_options
d'utiliser ce que vous avez défini pouraction_mailer
dans le fichier environnement approprié (development.rb
,production.rb
, etc.).Pour garder les choses aussi SÈCHES que possible, faites-le dans votre
config/environment.rb
fichier afin que vous n'ayez à le faire qu'une seule fois:Désormais, lorsque vous démarrez votre application, l'ensemble de votre application
default_url_options
correspondra à votreaction_mailer.default_url_options
:Pointe du chapeau à @pduersteler pour m'avoir conduit sur cette voie.
la source
config/environment.rb
comme vous l'avez décrit a été la clé pour faire fonctionner mon mailer dans la console. Je vous remercie!Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options
pour Rails 5.2+Lorsque vous utilisez une
listing_url
méthode, l'URL complète sera renvoyée (pas une URL relative comme d'habitude). C'est pourquoi rails vous demande l'hôte, pour calculer l'URL entière.Comment pouvez-vous dire aux rails l'hôte? Vous pouvez le faire de plusieurs manières:
1.Ajout de cette option à chaque environnement:
REMARQUE: Si vous travaillez à l'intérieur d'un moteur de rails, n'oubliez pas de faire de même pour votre application factice lors des tests de moteur:
path_to_your_engine/test/dummy/config/environments/*
car lorsque vous testez le moteur, c'est contre quoi les rails sont testés.Ajoutez l'option host à la méthode foo_url comme ceci:
3.Ne pas sortir l'hôte avec l'option
:only_path to true
.IMHO je ne vois pas le point sur celui-ci car dans ce cas j'utiliserais la
listing_path
méthodela source
Chose drôle, ce réglage
config.action_mailer.default_url_options
ne m'aide pas. De plus, jouer avec des paramètres indépendants de l'environnement dans des endroits où je sentais que cela n'appartenait pas n'était pas satisfaisant pour moi. De plus, je voulais une solution qui fonctionne lors de la génération d'URL dans les workers sidekiq / resque.Mon approche jusqu'à présent, qui va dans
config/environments/{development, production}.rb
:Cela fonctionne pour moi dans les rails> = 3.2.x.
la source
config/environment.rb
fichier pour ce faire. Et une réponse ajoutée qui entre dans les détails: stackoverflow.com/a/48529627/293280 Merci de m'avoir pointé dans cette direction.Rails.application.routes.default_url_options[:host]= 'localhost:3000'
Dans le developemnt.rb / test.rb, peut être plus concis comme suit:
la source
Vous pouvez toujours transmettre l'hôte en tant que paramètre à l'assistant d'URL:
la source
listing_url(listing, host: request.host, port: 3000)
Vous pouvez définir les options d'URL par défaut dans le contrôleur d'application:
http://guides.rubyonrails.org/action_controller_overview.html#default_url_options
la source
J'ai eu cette même erreur. J'ai tout écrit correctement, y compris le Listing 10.13 du tutoriel.
évidemment avec "example.com" remplacé par mon URL de serveur.
Ce que j'avais passé sous silence dans le didacticiel était cette ligne:
La réponse pour moi a donc été d'éteindre et de rallumer le serveur.
la source
allez dans config / environnements / test.rb
Rails.application.routes.default_url_options [: host] = 'localhost: 3000'
la source
juste au cas où quelqu'un trouverait cette recherche d'erreurs concernant ActiveStorage:
si vous avez une action de contrôleur où vous souhaitez générer des URL de téléchargement, etc. avec le service de disque local (très probablement dans un environnement de test), vous devez le faire
include ActiveStorage::SetCurrent
dans le contrôleur afin de permettreblob.service_url_for_direct_upload
de fonctionner correctement.la source
L'ajout de default_url dans les routes n'est pas la bonne solution bien que cela fonctionne dans certains cas.
Vous devez définir default_url dans chaque environnement (développement, test, production).
Vous devez apporter ces modifications.
la source
J'ai résolu le problème en configurant environment.rb comme
YourApp :: Application.default_url_options = VotreApp :: Application.config.action_mailer.default_url_options
Vous devez définir default_url_options pour l'action mailer par rapport à chaque environnement comme le développement, les tests, la préparation et la production, etc.
Référence: hôte manquant vers lequel établir un lien! Veuillez fournir: paramètre hôte ou définir default_url_options [: hôte]
la source
La réponse ci-dessus n'a pas fonctionné pour moi, du moins pas comme je le voulais. J'ai réalisé
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
après avoir installé la devise. J'espère que cela aidera quelqu'un avec le même problème.la source