184 votes

Heroku/devise - Hôte manquant pour le lien ! Veuillez fournir le paramètre :host ou définir les options default_url_options[:host].

J'essaie de pousser mon application sur Heroku. Je suis encore en phase de développement. J'utilise devise avec le module confirmable.

Lorsque j'essaie d'ajouter un utilisateur avec la console heroku, j'obtiens cette erreur :

Missing host to link to! Please provide :host parameter or set default_url_options[:host]

Dans l'environnement de test et de développement, j'ai la ligne suivante :

environnements/developpement.rb et environnements/test.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }

Je n'ai pas mis en place quelque chose dans l'environnement de production.

J'ai essayé de pousser avec

config.action_mailer.default_url_options = { :host => 'mywebsitename.com' }
config.action_mailer.default_url_options = { :host => 'heroku.mywebsitename.com' }

mais ça ne marche pas non plus

Je vois sur le web que cela pourrait être lié à ActionMailer mais je ne sais pas ce que je dois configurer. Merci beaucoup pour votre idée !

ÉDITION :

Salut,

Afin de ne pas faire planter mon application lorsque je pousse sur heroku j'ai mis ceci dans mon env/test.rb et mon env/dev.rb (pas dans env.rb je pense que c'est parce que c'est une application rails 3)

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

Mais quand j'ai essayé de créer un utilisateur dans la console heroku :

User.create(:username => "test", :email => "test@test.com", :password => "test1234", :password_confirmation => "test1234", :confirmed_at => "2010-11-03 14:11:15.520128")

Voici les erreurs que j'ai obtenues :

ActionView::Template::Error: Missing host to link to! Please provide :host parameter or set default_url_options[:host]
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:473:in `url_for'
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/url_for.rb:132:in `url_for'
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_view/helpers/url_helper.rb:99:in `url_for'
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:195:in `user_confirmation_url'

ÉDITION (2)

Quand je tape heroku logs sur la console j'ai obtenu ceci ==> production.log <== Donc je pense que quand on déploie sur heroku c'est déjà en production.

Je configure le fichier env/prod.rb comme ceci :

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

et maintenant j'ai cette erreur lorsque j'essaie de créer un utilisateur :

Errno::EAFNOSUPPORT: Address family not supported by protocol - socket(2)
/usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `initialize'
/usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `open'
/usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `do_start'
/usr/ruby1.8.7/lib/ruby/1.8/timeout.rb:62:in `timeout'

248voto

Dark Passenger Points 18408

Vous devez ajouter ceci à votre environment.rb

  config.action_mailer.default_url_options = { :host => 'localhost' }

Assurez-vous de changer host à votre url de production et gardez le localhost pour le développement. Ceci est pour le mailer, il a besoin d'un email par défaut pour envoyer des avis tels que des confirmations etc...


Vous devez vérifier les journaux sur le serveur heroku. heroku logs Exécutez ça depuis la console et ça vous donnera l'erreur exacte.

Lorsque vous poussez vers heroku, vous devez configurer l'option environment.rb avec le sous-domaine heroku :

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

Selon la version, cela devrait aller dans production.rb pas environment.rb .

0 votes

Salut Sam ! Je suis désolé mais je n'ai pas compris. J'ai juste ajouté la ligne config.action_mailer.default_url_options = { :host => 'localhost' } dans mon env.rb mais mon application rails 3 se plante sur heroku. Est-ce que je dois mettre quelque chose dans env/prod.rb aussi ? (désolé, mon anglais est si so-so..)

0 votes

Aussi, dois-je mettre mon application rails en mode production ? Merci !

0 votes

Bonjour Sam, j'ai également ajouté quelques informations dans le corps de ma question. Votre réponse m'aide mais je n'arrive toujours pas à enregistrer un utilisateur via la console heroku. Je serais heureux si vous pouviez me dire ce que vous pensez à ce sujet ! Merci !

39voto

benoitr Points 1855

Ok,

Vous devez d'abord installer la gemme sendgrid avec cette ligne de commande :

heroku addons:add sendgrid:free

Ensuite, il vous suffit de configurer votre env/dev.rb et env/prod.rb comme ceci :

env/dev.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }

env/prod.rb

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

Push sur git et heroku. Cela devrait fonctionner

0 votes

J'obtiens cette erreur lorsque je référence config.action_mailer dans production.rb : /app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails/railtie/configuration.rb:77:in method_missing': undefined method action_mailer' for #<Rails : :Application::Configuration:0x0000000241f760> (NoMethodError)

0 votes

Je ne suis pas sûr de pouvoir vous aider... L'avez-vous référencé à l'intérieur du bloc ? (Website::Application.configure do ... config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' } } ... end)

6 votes

Maintenant la commande sendgrid est heroku addons:add sendgrid:starter (voir les détails d'utilisation à devcenter.heroku.com/articles/sendgrid )

24voto

Ross Points 1056

La réponse de Codeglot ci-dessus fait l'affaire, mais nous voulions quelque chose d'un peu plus flexible, alors nous avons fait ceci :

Sur Heroku, nous exécutons plusieurs environnements de production pour la mise en place et les tests, nous avons donc besoin d'une solution flexible pour le fichier d'environnement production.rb.

Dans production.rb

config.action_mailer.default_url_options = { :host => ENV['MAILER_URL'] }

Ensuite, définissez la variable d'environnement MAILER_URL pour votre application comme suit

heroku config:set MAILER_URL=my-awesome-app.herokuapp.com --app my-awesome-app

18voto

Mike Points 3544

Si vous travaillez sur Cèdre :

  1. exécuter heroku addons:add sendgrid:free depuis votre console.

  2. Ajoutez les lignes suivantes à config/environments/production.rb dans votre application.

.

  ActionMailer::Base.smtp_settings = {
    :address        => 'smtp.sendgrid.net',
    :port           => '587',
    :authentication => :plain,
    :user_name      => ENV['SENDGRID_USERNAME'],
    :password       => ENV['SENDGRID_PASSWORD'],
    :domain         => 'heroku.com'
  }

  ActionMailer::Base.delivery_method = :smtp

  config.action_mailer.default_url_options = { :host => 'YOUR-DOMAIN-HERE.COM' }

14voto

maudulus Points 274

J'ai dû faire un certain nombre de choses pour qu'il fonctionne dans le production l'environnement : A l'intérieur de mon production.rb (/config/environments/production.rb), j'ai ajouté ce qui suit :

Rails.application.routes.default_url_options[:host] = 'myappsname.herokuapp.com'
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default :charset => "utf-8"

C'est avec Rails 4 y Devise 3

1 votes

Cette structure de la default_url_options a causé une erreur qui a fait échouer mes actifs de précompilation, juste pour info. Quand je l'ai changé en ` = { host : 'myappsname.herokuapp.com' }`, ça a marché.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X