Quase sempre você deseja enviar emails para seus usuários em um processo em segundo plano. O usuário final não deve ter que esperar até que o sistema faça uma solicitação ao provedor de e-mail, faça um handshake e, em seguida, aguarde a conclusão do envio do e-mail. Esta é uma maneira rápida e inteligente de enviar e-mails via Sendgrid para seus usuários usando o produto Iron’s Worker usando Ruby. Como o Worker é baseado em Docker, você pode usar qualquer linguagem de programação que desejar. Esse é um dos benefícios de usar o Iron em comparação com outros sistemas de trabalho em segundo plano.
Em um novo diretório, crie um Gemfile com o seguinte:
source 'https://rubygems.org'
gem 'sendgrid-ruby'
gem 'iron_worker', '>= 3.0.0'
Crie o arquivo Ruby, send_email.rb, que enviará seus e-mails para você:
Estamos usando essa abordagem aqui, pois usamos a Iron CLI. Você provavelmente desejaria enviar a carga útil de forma programática usando uma do Iron Ruby Gem.
require_relative 'bundle/bundler/setup'
require 'iron_worker'
require 'sendgrid-ruby'
include SendGrid
from = Email.new(email: IronWorker.payload["from"])
to = Email.new(email: IronWorker.payload["to"])
subject = IronWorker.payload["subject"]
content = Content.new(type: 'text/plain', value: IronWorker.payload["body"])
mail = Mail.new(from, subject, to, content)
sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
response = sg.client.mail._('send').post(request_body: mail.to_json)
puts response.status_code
puts response.body
puts response.headers
Crie um arquivo payload.json que conterá os dados que você enviará ao seu programa Ruby.
{
"from": "test@example.com",
"to": "you@example.com",
"subject": "It works!",
"body": "Hello from IronWorker"
}
Agora você precisa instalar as dependências usando Docker, compactar seu código e fazer upload para o Iron.
Observe que, neste exemplo, você usará a imagem Docker baseada em Ruby do próprio Iron por conveniência. Você pode usar definitivamente usar suas próprias imagens se desejar.
> docker run --rm -v "$PWD":/worker -w /worker iron/ruby:dev bundle install --standalone --clean
> zip -r email_worker.zip .
> iron worker upload -e SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY --name email_worker --zip email_worker.zip iron/ruby ruby send_email.rb
Depois que seu código for carregado para o Iron, você pode enviar e-mails sempre que desejar. Veja como enviar um e-mail via Iron CLI:
> iron worker queue --payload-file payload.json --wait email_worker
Você deve ver uma saída semelhante a esta:
Conclusão
Usar o produto Iron’s Worker é uma ótima maneira de executar tarefas em segundo plano. É independente de idioma, é executado em seu próprio contêiner e pode ser expandido sem que o usuário final precise se preocupar com a infraestrutura. Está disponível em todas as nuvens públicas e no local, para que você nunca precise se preocupar em ficar restrito a um único fornecedor de nuvem.