Errno::ECONNREFUSED: Connexion refusée - connect(2) pour l'action mailer
je travaille avec les rails depuis longtemps. Maintenant, je suis confronté à un petit problème dans L'ActionMailer. Je veux envoyer un e-mail lorsque l'utilisateur est enregistré, pour confirmer son inscription.
Je suis en mesure d'envoyer un e-mail dans le mode de développement mais où comme pas dans le mode de production.
l'exception Errno::ECONNREFUSED: Connexion refusée - connect(2) est à venir à chaque fois quand deliver méthode est appelé.
J'ai écrit le code suivant.
Ma configuration SMTP ressemble à:
config.action_mailer.default_url_options = { :accueil => "localhost:3000" }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.smtp_settings = {
:openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE,
:ssl => true,
:enable_starttls_auto => true, #this is the important stuff!
:address => 'smtp.xxxx.xxx',
:port => xxx,
:domain => 'xxxxxx',
:authentication => :plain,
:user_name => 'xxxxxxx@xxx.xxx',
:password => 'xxxxxxxxx'
}
dans le contrôleur, j'ai écrit ce qui suit:
def confirm_registration_in_c
@user = User.find_by_email(asdf123@gmail.com)
if @user
UserMailer.confirm_registration(@user).deliver
end
end
dans mon user_mailer.rb:
class UserMailer < ActionMailer::Base
default from: "from@example.com"
def confirm_registration(user)
@user = user
@user_name = @user.name
email = @user.email
mail(:to => email, :subject => "Reset your password")
end
end
je suis en mesure d'envoyer un e-mail en mode développement sur mon hôte local, mais je ne suis pas en mesure d'envoyer l'e-mail sur le serveur dédié.
Quelqu'un peut-il m'aider s'il vous plaît?
6 réponses
dans ma situation, j'ai rencontré des problèmes similaires lorsque j'ai essayé de faire à travers un tutoriel d'application D'envoi-e-mail Rails, les journaux Heroku n'arrêtaient pas de me dire que
......
Errno::ECONNREFUSED (Connection refused - connect(2) for "localhost" port 25):
......
après avoir comparé mon code avec le code d'auteur, j'ai découvert que je n'avais pas configuré mes configurations ActionMailer dans la config/environments/production .RB "1519130920 de fichier".
puis j'ai réalisé que je venais d'avoir mon config/environments/development.rb configuré pour envoyer-email, mais je ne l'avais pas fait pour mon config/environnements/production.rb .
donc vous pouvez le vérifier lorsque le comportement de votre application difers entre le développement et la production.
assurez-vous d'avoir configuré votre port correctement. Je suis passé de gmail en développement (port 587) à l'envoi depuis mon serveur local en production et je recevais cette erreur jusqu'à ce que je corrige le port à celui que mon serveur utilise (port 25).
pour la production vous ne pouvez pas écrire
config.action_mailer.default_url_options = { :host => "localhost:3000" }
ajouter l'url de production pour l'hôte, comme,
config.action_mailer.default_url_options = { :host => "http://www.yourdomain.com" }
mon problème n'est pas identique à cette question, mais je pense que beaucoup trouveraient ce fil via google.
si vous utilisez un service SMTP externe comme sendgrid et que vous avez configuré ActionMailer en conséquence, il y a quand même cette erreur:
Errno:: ECONNREFUSED: Connection refused-connect (2) for "localhost" port 25
vous pouvez passer le hachage de configuration avec la clé String, qui sont ignorés. Les touches doivent être symboles !
cela peut se produire si elle est dé-sérialisée, ce que j'ai fait est de s'assurer que les clés sont des symboles:
config.action_mailer.smtp_settings = get_smtp_setting.symbolize_keys
je viens de traquer un problème similaire tout en essayant de déployer wordpress avec Capistrano.
cap aborted!
Errno::ECONNREFUSED: Connection refused - connect(2) for "{my-ip-address}" port {my-ssh-port}
je voudrais également obtenir cette erreur similaire:
Tasks: TOP => git:create_release
(See full trace by running task with --trace)
The deploy has failed with an error: #<Errno::ECONNREFUSED: Connection refused - connect(2) for "my-ip-address" port {my-port}>
il s'avère que c'était un problème avec les sessions SSH simultanées car mon serveur exécute Fail2Ban. Pour résoudre cela, j'ai simplement fait ce qui suit:
-
éditer la prison qui contient SSH configurations
$ sudo nano /etc/fail2ban/jail.local
-
rechercher [SSH] et définir activé = false
-
puis de trouver [ssh-ddos] et réglez activé = false
-
N'oubliez pas de redémarrer Fail2Ban après vos modifications et open-ssh (si c'est ce que votre utilisation)
$ sudo service fail2ban reload
$ sudo /etc/init.d/ssh reload
il est intéressant de noter que la connexion serait refusé à différentes étapes (tâches) dans le déploiement. Par exemple après un redémarrage et un rapide bundle exec cap production deploy:check
tout semble bien. Puis j'ai essayé de déployer et j'ai reçu la même erreur, mais pendant l'exécution d'une tâche différente. J'utilise aussi UFW que j'ai désactivé et reenabled sans problèmes. UFW n'était pas la cause du problème ci-dessus.
j'ai eu un problème similaire après avoir résolu ceci. C'est une question avec les permissions du répertoire current
. C'est par ici.
il y a une autre raison à cette erreur:
Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25
il faut regarder le service SENDMAIL sur votre serveur:
- est-ce que SENDMAIL est installé?
- est-ce que SENDMAIL fonctionne?
j'ai eu cette erreur à cause de l'arrêt de SENDMAIL.
bonne chance!