# HTTP calls within transaction
User.transaction do
user = User.new(user_params)
user.save!
# HTTP API call
PaymentsService.charge!(user)
end
#=> raises Isolator::HTTPError
# background job
User.transaction do
user.update!(confirmed_at: Time.now)
UserMailer.successful_confirmation(user).deliver_later
end
#=> raises Isolator::BackgroundJobError
ブログとか書き慣れて無いのに当番制だったので 🤮 になりながら https://blog.studysapuri.jp/entry/2018/11/19/ を書いたことが有る。 モチベーション的なのはそこに大体書いたので省略。
普段はなんかあんま興味ないのとか、見たこと有るようなのばっかりが上がってくる GitHub dashboard の Explore repositories で https://github.com/palkan/isolator というのを見て、おぉ?となった。
例の中でも真っ先に決済サービスが入ってるし、多分この作者もなんか辛いことがあったのでは・・・ ということで、使ったことも無いし実装も見てないけどコンセプトに 👍 して置いた。機会が合ったら使ってみよう。