Rails Mailer “Net::OpenTimeout: l'exécution est expiré Exception sur le serveur de production seulement
Je suis en Ruby en utilisant l'IRM 2.0.0 et les Rails 3.2.12 sur une Ubuntu 12.04 TLS VPS et de tenter de régler les notifications d'emails dans mon application. Ça marchait très bien il y a quelques jours, mais pas plus. Mon hébergeur est OVH.
Mes paramètres SMTP:
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => '[email protected]',
:password => 'secret',
:authentication => 'plain',
:enable_starttls_auto => true
}
À l'aide de RAILS_ENV=production rails console
:
class MyMailer < ActionMailer::Base
def test_email
sender = "[email protected]"
receiver = "[email protected]"
mail from: sender, to: receiver, subject: "Hello!", body: "World!!"
end
end
=> nil
MyMailer.test_email.deliver
La sortie:
Net::OpenTimeout: execution expired
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:540:in `initialize'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:540:in `open'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:540:in `tcp_socket'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:550:in `block in do_start'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:549:in `do_start'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:519:in `start'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/network/delivery_methods/smtp.rb:144:in `deliver!'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:2034:in `do_delivery'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:229:in `block in deliver'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/actionmailer-3.2.12/lib/action_mailer/base.rb:415:in `block in deliver_mail'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `block in instrument'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `instrument'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/actionmailer-3.2.12/lib/action_mailer/base.rb:413:in `deliver_mail'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:229:in `deliver'
from (irb):28
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/rails/commands/console.rb:47:in `start'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/rails/commands/console.rb:8:in `start'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'2.0.0p0 :029 >
J'ai essayé le suivant:
- La
exception_notification
gem a été ajouté à l'installation il y a quelques jours. J'ai essayé de commenter sa ligne dansGemfile
ainsi que sa configuration correspondante, et d'exécuterbundle install
. Après le redémarrage du serveur, le problème est toujours présent, même si je l'ai supprimer et recréer l'sertie. - Le tester sur une machine virtuelle (exactement la même configuration que le VPS, y compris des règles iptables): œuvres
- Désactiver des règles iptables: ne fonctionne pas
- Se connecter manuellement à Gmail à partir de la VPS utilisant openssl: œuvres (ce n'est donc pas un problème de firewall - voir ici: La connexion à smtp.gmail.com via la ligne de commande);
- Activer IMAP dans Gmail les options de compte (s'il a été désactivé): ne fonctionne pas
- Utiliser un autre compte Gmail: ne fonctionne pas
- Remplacer Ruby 2.0.0 par Ruby 1.9.3
- De mise à niveau pour les Rails 3.2.13
Quelqu'un d'avoir la moindre idée de comment résoudre ce problème?
Merci!
- Voici une autre manifestation: exécution expiré /ree-187/lib/ruby/1.8/timeout.rb:64:dans
open' .../vendor/plugins/action_mailer_optional_tls/lib/smtp_tls.rb:40:in
do_tls_start' /.../vendor/plugins/action_mailer_optional_tls/lib/smtp_tls.rb:40:dans "le do_tls_start'...
Vous devez vous connecter pour publier un commentaire.
J'ai probablement eu le même problème, mon application de production n'a pas à envoyer des mails, mais tout le développement a été fonctionne correctement. J'ai aussi eu la "Net::OpenTimeout" erreur.
Mon problème est que j'ai été en utilisant un serveur de Google de production, et il bloque les ports 25, 465 et 587 sur les connexions sortantes.
Depuis que j'ai été en utilisant Mandrill pour l'envoi de mails, J'ai été en mesure de changer le port de connexion à partir de 587 à 2525 et tout est ok maintenant.
D'abord, faire un lien direct avec Telnet:
C'est la connexion de base de dépannage, et fonctionne avec n'importe quel fournisseur ou le port. Remplacer SendBlue et le port 587 avec votre nom d'hôte/port.
Si vous obtenez cette erreur:
ensuite, le problème n'est pas dans les Rails.
Dans l'exemple ci-dessus, le problème est dans la numéro de port. Des Services comme sendinblue ou mandrill (je crois que gmail trop) ne prennent pas en charge le port 587 plus. "2525" est le nouveau "587".
Si vous bénéficiez d'un délai de telnet, vérifiez ceci:
Là aussi, est une solution temporaire qui peut venir dans maniable, tout en attente de votre fournisseur d'hébergement pour résoudre le problème:
Ajoutez les lignes suivantes à
/etc/sysctl.conf
:Maintenant, les applications sont capables d'envoyer des e-mails.
Vous pouvez toujours savoir si IPv6 est activé appel
depuis le terminal. Deux réponses possibles:
0 => IPv6 est activé;
1 => IPv6 désactivé.
À partir de: https://serverfault.com/questions/512744/timeout-error-in-all-my-apps-for-every-call-to-smtp-servers
Le problème était dû à une mauvaise configuration de l'IPv6 sur le serveur de production et a maintenant été corrigé.
Vous pouvez configurer Ubuntu pour préférer IPv4 à IPv6. De cette façon vous serez en mesure d'envoyer des e-mails et l'accès IPv6 uniquement des sites. Edit
/etc/gai.conf
et décommentez la ligne suivante:Si vous (ou l'internet dans ce cas que cette question est la première conséquence de ce problème) sont des tests Mailgun, vous pouvez obtenir cette erreur si vous utilisez le port
25
. Changer le port de587
travaillé, même si leurs docs/liens rapides dit25
est ok pour l'utiliser.J'ai ajouté ces vers /etc/gai.conf dans CentOS7 et cela a fonctionné.
http://blog.asiantuntijakaveri.fi/2014/12/prefer-ipv4-over-ipv6-on-centos-6.html:title
Essayer ça, si tous les ci-dessus échoue
Je l'ai résolu par l'ajout de cette application.rb sous config