Blog do TaQ

Gambiarras para o Rails, SSL e Dreamhost

Publicado em Developer

Hoje tive um probleminha preparando para mandar uma app nova para a Dreamhost. Eu costumo sempre testar o envio de email, mesmo em modo de desenvolvimento, com as configurações de produção do servidor para ver se não vou ter nenhuma surpresa.

Aí hoje tive uma surpresa: por mais que eu mandasse o email com os deliver_something da vida, nada chegava na caixa postal. Aí fiz uma bela de uma burrada esquecendo que devia alterar o development.rb para o seguinte:

# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = true

Reparem no comentário: o default ali é false, ou seja, os emails não estavam sendo enviados e eu nem tchuns. Habilitando ali na hora de enviar o email o negócio já explodiu:

 OpenSSL::SSL::SSLError in SiteController#controller
 hostname was not match with the server certificate

Ahá! Olha aí o dito cujo. Mas o que vem a ser isso? Dando uma pesquisada, achei algumas coisas como esse link onde se menciona uma mudança em certificados SSL no Rails 2.2 blá blá blá. O autor menciona alguns jeitos que ele resolveu o problema, mas o meu problema aqui é fazer rodar no desenvolvimento usando o servidor da produção. Como fazer?

Aí resolvi fazer a gambiarra. Primeiro usei um usuário para conectar via ssh no host. Chegando lá, pedi para abrir a porta 25 com o telnet:

[server]$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.dreamhost.com ESMTP
quit
221 2.0.0 Bye
Connection closed by foreign host.

Opa, legal, ele abre a porta 25 no localhost remoto, e está tudo certinho, é um SMTP. Conferido isso, vou criar um túnel ssh para lá (o Lichti tem uma explicação sobre isso aqui), na minha máquina local:

[taq@]$ ssh user@host.com.br -L 2500:127.0.0.1:25 -N
user@host.com.br's password:

Feito isso, já tenho uma porta local apontando para o SMTP no servidor. Agora é alterar o development.rb para usar isso, inclusive até sem autenticação, já que estamos lá no servidor:

# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = true

config.action_mailer.smtp_settings = {
  :address        => 'localhost',
  :port           => 2500,
  :domain         => 'localhost'
}

Tchans! Não é que funcionou? Agora os emails estão indo e não tenho nenhum erro. Daria para eu experimentar configurar o sendmail também, mas, putz ... deixa para outro dia. :-)

Atualizado: Xi, o buraco é mais embaixo, eu coloquei o treco em produção e o erro ocorre também! Parece que é alguma coisa com os certificados SSL do servidor específico que estou usando, abri um chamado na Dreamhost já, vamos aguardar ...


Tags:


Comentários

comments powered by Disqus

Twitter