Heroku / devise - Hôte manquant à lier! Veuillez fournir: paramètre hôte ou définir default_url_options [: hôte]

178

J'essaye de pousser mon application sur heroku. Je suis toujours en développement. J'utilise la devise avec le module confirmable.

Lorsque j'essaie d'ajouter un utilisateur avec la console heroku, j'ai 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 / development.rb et environnements / test.rb

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

Je n'ai rien configuré 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 trop ..

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!

ÉDITÉ:

Salut,

Afin de ne pas faire planter mon application lorsque j'appuie sur heroku, je mets 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 => "[email protected]", :password => "test1234", :password_confirmation => "test1234", :confirmed_at => "2010-11-03 14:11:15.520128")

voici les erreurs que j'ai:

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'

MODIFIÉ (2)

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

Je configure env / prod.rb comme ceci:

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

et maintenant j'ai ceci comme 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'
Benoitr
la source

Réponses:

243

Vous devez l'ajouter à votre environment.rb

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

Assurez-vous de modifier hostvotre URL de production et de la conserver localhost pour le développement. C'est pour l'expéditeur, il a besoin d'un e-mail par défaut pour envoyer des notifications telles que des confirmations, etc.


Vous devriez vérifier les journaux sur le serveur heroku, heroku logsexécutez-le à partir de la console et il vous indiquera l'erreur exacte.

Lorsque vous poussez vers heroku, vous devez configurer le environment.rbfichier avec le sous-domaine heroku:

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

Selon la version, cela devrait entrer production.rb, non environment.rb.

alorsengah
la source
Salut Sam! Je suis désolé mais je ne l'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 plante sur heroku. Dois-je aussi mettre quelque chose sur env / prod.rb? (désolé mon anglais est si moyen ..)
benoitr
De plus, devais-je mettre mon application rails en mode production? Merci!
benoitr
1
:host => 'yourapp.heroku.com' cela devrait être votre domaine. Par exemple, si votre domaine est yahoo.com, il devrait l'être yahoo.heroku.comou si vous avez déjà configuré des domaines personnalisés, il ne s'agira que de votre URLyahoo.com
thenengah
1
Merci Sam, je trouve la solution. Le fait est que je n'avais pas l'addon sendgrid et mon smtp n'a pas été configuré. Merci beaucoup pour toute votre sauvegarde!
benoitr
1
Cela ne va-t-il pas être config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com', par opposition à juste config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'?
maudulus
37

D'accord,

Vous devez d'abord installer le gem 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' }

Appuyez sur git et heroku. Cela devrait fonctionner.

Benoitr
la source
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 'pour # <Rails:: Application :: Configuration: 0x0000000241f760> (NoMethodError)
Laran Evans
Je ne suis pas sûr de pouvoir vous aider ici ... L'avez-vous référencé à l'intérieur du bloc? (Site Web :: Application.configure do ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... end)
benoitr
6
maintenant la commande sendgrid est heroku addons: ajoutez sendgrid: starter (voir les détails d'utilisation sur devcenter.heroku.com/articles/sendgrid )
Danny
23

La réponse de Codeglot ci-dessus fait le travail, 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 préparation et les tests, nous avons donc besoin d'une solution flexible pour le fichier d'environnement production.rb.

En 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 ceci

heroku config:set MAILER_URL=my-awesome-app.herokuapp.com --app my-awesome-app
Ross
la source
18

Si vous utilisez Cedar :

  1. exécuter à heroku addons:add sendgrid:freepartir de votre console.

  2. Ajoutez les lignes suivantes à config/environments/production.rbdans 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' }
Mike
la source
13

J'ai dû faire un certain nombre de choses pour le faire fonctionner dans l' environnement de production : À l'intérieur de mon production.rbfichier (/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 et Devise 3

maudulus
la source
1
Cette structure du a default_url_optionsprovoqué une erreur qui a fait échouer mes actifs de précompilation, juste pour info. Quand je l'ai changé en `= {host: 'myappsname.herokuapp.com'}` cela a fonctionné.
Liz le
0

Celui qui travaille après tant de recherches,

  1. N'oubliez pas d'ajouter par défaut from: l' adresse mail dans votre ApplicationMailer (application_mailer.rb) comme,

    class ApplicationMailer < ActionMailer::Base
      default from: '[email protected]'
      layout 'mailer'
    end
  2. Ajoutez la configuration ci-dessous dans votre production.rb .

    config.action_mailer.default_url_options = 
      { :host => 'yourapp.herokuapp.com' }
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      address:              'smtp.gmail.com',
      port:                 587,
      domain:               'heroku.com',
      user_name:            '[email protected]',
      password:             'yourgmailpassword',
      authentication:       'login',
      enable_starttls_auto: true
    }
  3. Activez IMAP à partir de vos paramètres Gmail dans l' onglet Transfert IMAP / POP .

  4. Autoriser les applications moins sécurisées: ACTIVÉ à partir de https://myaccount.google.com/lesssecureapps

Vous êtes maintenant prêt à partir. :)

Anshab MK
la source