バックグラウンドジョブからユーザーにメールを送りたいと思ったことはありませんか?
ユーザーを、あなたのシステムがメールプロバイダーにリクエストを終わるまで待たせるのは良くありません。また、ハンドシェイクして、メールが送信完了になるまで待足せるのも良くないです。
早くて簡単に「Sendgrid」,「Iron Worker」、「Ruby」を使用してメールを送信しましょう。
「Iron Worker」はDockerを元にしていますので、あなたの好きなプログラミング言語を使用できます。この事は、他のバックグラウンドサービスと比べた場合の優位点になります。
- 新しいディレクトリーにアプリを作りましょう。 Gemfileに下記を追加して下さい。
source 'https://rubygems.org'
gem 'sendgrid-ruby'
gem 'iron_worker', '>= 3.0.0'
- 「send_email.rb」ファイルを作成して下さい。このファイルは、メールを送ります。
私たちはIron CLIを使用したアプローチをしますが、もしかするとあなたは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
- 「payload.json」ファイルを作成して下さい。このファイルはメールを送る時にRubyが使用するデータになります。
{
"from": "test@example.com",
"to": "you@example.com",
"subject": "It works!",
"body": "Hello from IronWorker"
}
- Dockerの依存関係をインストールし、コードを圧縮して「Iron.io」へアップロードします。
注意;この記事ではIronのRubyベースのDocker イメージを使用しますが、あなた独自のDockerイメージも使用出来ます。
> 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
「Iron.io」へ圧縮したファイルをアップロード終えたら、いつでもあなたの好きな時にメールを送る事が出来ます。
- Iron CLIを使用してメールを送って見ましょう。
> iron worker queue --payload-file payload.json --wait email_worker
まとめ
Iron.io ワーカーを使用する事で、バックグラウンドジョブを簡単に実行出来ます。
プログラミング言語に関係無く使用出来、オートスケールアップなどインフラを気にせずに使用出来ます。
そして、全てのクラウドとオンプレミス導入に対応していますので、ベンダーロックインを回避出来ます。