J'essaie de pousser mon application sur le heroku. Je suis toujours en dev. J'utilise le module avec le module confirmable.
Lorsque j'essaie d'ajouter un utilisateur avec la console heroku, j'ai l'erreur suivante:
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:
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 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!
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 un Rails 3 app)
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 eues:
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'
Lorsque je tape les journaux heroku sur la console, je reçois ceci ==> production.log <== Je pense donc que lorsque l’on déploie sur heroku, il est déjà en production.
Je configure le env/prod.rb comme ceci:
config.action_mailer.default_url_options = { :Host => 'yourapp.heroku.com' }
et maintenant j'ai ceci comme erreur quand j'essaye 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'
Vous devez ajouter ceci à votre environment.rb
config.action_mailer.default_url_options = { :Host => 'localhost' }
Assurez-vous de changer Host
en votre URL de production et conservez-le localhost pour le développement. Ceci est destiné à l'expéditeur, il a besoin d'un email par défaut pour envoyer des avis tels que des confirmations, etc.
Vous devriez vérifier les journaux sur le serveur heroku heroku logs
lancez-le à partir de la console et il vous indiquera l'erreur exacte.
Lorsque vous appuyez sur heroku, vous devez configurer le environment.rb
fichier avec le sous-domaine heroku:
config.action_mailer.default_url_options = { :Host => 'yourapp.heroku.com' }
Selon la version, cela devrait aller dans production.rb
, ne pas environment.rb
.
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 suit:
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. Ça devrait marcher ..
La réponse de Codeglot ci-dessus fait le travail, mais nous voulions quelque chose d'un peu plus flexible, nous avons donc fait ceci:
Sur Heroku, nous exécutons plusieurs environnements de production pour la mise en scène 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'] }
Définissez ensuite 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
Si vous utilisez Cedar :
courir heroku addons:add sendgrid:free
depuis votre console.
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' }
Je devais faire un certain nombre de choses pour que cela fonctionne dans l'environnement production: À l'intérieur de mon production.rb
fichier (/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"
Ceci est avec Rails 4 et Devise
Voici un truc à considérer. Il sera plus facile de changer de serveur et d’environnement, et de changer de domaine comme dans un domaine personnalisé chez heroku.
Au lieu de coder en dur le nom d'hôte, lisez-le à partir de la demande. Voici un exemple d'une application simple que j'ai.
class MyMailController < ApplicationController
before_filter :set_Host_from_request, only: [:create]
....
private
def set_Host_from_request
ActionMailer::Base.default_url_options = { Host: request.Host_with_port }
end
end
dans l'exemple simple, je n'ai qu'une action, créer, qui entraîne l'envoi d'e-mails. Vous pouvez ajouter le before_filter dans application_controller.rb sans les exclus pour que le nom d'hôte soit toujours stocké.
PRO:
CON:
sans default_url_options, vous ne pouvez pas envoyer manuellement dans la console
#config.action_mailer.default_url_options = { :Host => 'mydomain.com' }
$Rails console
User.invite!(email: "[email protected]")
ActionView::Template::Error: Missing Host to link to! Please provide the :Host parameter, set default_url_options[:Host], or set :only_path to true
...stacktrace
Si vous voyez des inconvénients que je ne peux pas, merci de les partager! Merci
Celui qui travaille après tant de recherches,
N'oubliez pas d'ajouter l'adresse par défaut de: mail dans votre ApplicationMailer (application_mailer.rb) comme,
class ApplicationMailer < ActionMailer::Base
default from: '[email protected]'
layout 'mailer'
end
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
}
Activez IMAP à partir de vos paramètres Gmail dans l’onglet Transfert d’IMAP/POP .
Autoriser les applications moins sécurisées: ON à partir de https://myaccount.google.com/lesssecureapps
Vous êtes maintenant prêt à partir. :)