サイドキイドライ
新しい宝石を発表しました.
それが来るとき、一般的な欲求不満Sidekiq 仕事と彼らの議論.
SideKiqは最も人気のあるバックグラウンドジョブソリューションの一つです.私のです
Rubyアプリの第一選択.The dry-rb 宝石の家族も
非自明なアプリケーションに不可欠です.我々が2を結合するならば、...
With
あなたのsidekiq仕事に.でもどうして?
何度も仕事をデバッグしなければならなかった
無効な引数でエンキューされます.
例:
整数のID
enqueuedジョブが完了するチャンスは全くありません
成功しました.もちろん
がある
バックグラウンドジョブの引数は、システムの堅牢性を向上させます.あなたのオブジェクト
輸送において
ジョブが実行されるときに期待される構造を持つことが保証されます.
上の例は以下のようにリファクタリングされます:
さて、ハッシュ引数は驚きにつながることができるストリングキーで逆シリアル化されます.
バックグラウンドジョブが2つ以上の位置引数をとると
1つのstructオブジェクトを取るためにそれをリファクタ
分かりやすい名前.
Rails Worldでは、レコードを使ってジョブをenqueueするのが一般的です
この模様はどこも悪い.しかし、場合によっては、開発者は
モデルの後に盲目的にモデル.
使用によって
あなたのコードでまっすぐ.各ジョブ引数の型を記述する代わりに
簡単に時代遅れになることができ、structの属性の型を参照できます.
この宝石を追加すると、アプリケーション内の既存のジョブを中断しません.
これはジョブのキューに登録されています
パラメータ構造体に新しい属性を追加すると、すでにenqueuedされたジョブが中断されません.
いずれかを使用して構造体のバージョンには些細です
ジョブ処理ライブラリSideKIQと互換性があります
exq , あなたのdry ::struct引数を見捨てません.これはおそらく許容できるトレードオフです.
宝石はrubygems上でホストされていますlink ). これは2つのsidekiqを提供します
のインスタンスをシリアル化して逆シリアル化するミドルウェア
宝石ファイルに宝石を追加します.
dry-rb dry-types 他の便利なライブラリやポストについては、私のtefterを購読するRuby & Rails リスト.
sidekiq-dry
多様性に取り組むそれが来るとき、一般的な欲求不満Sidekiq 仕事と彼らの議論.
根拠
SideKiqは最も人気のあるバックグラウンドジョブソリューションの一つです.私のです
Rubyアプリの第一選択.The dry-rb 宝石の家族も
非自明なアプリケーションに不可欠です.我々が2を結合するならば、...
With
sidekiq-dry
場合はDry::Struct
引数としてあなたのsidekiq仕事に.でもどうして?
タイプあいまいさを防ぐ
何度も仕事をデバッグしなければならなかった
無効な引数でエンキューされます.
例:
class SendInvitationEmailJob
include Sidekiq::Worker
def perform(user_id, invitee_email)
# code
end
end
SendInvitationEmailJob.perform_async(user.id, params[:invitee_email])
上記のコードの問題は、user_id
でない整数のID
invitee_email
が有効なメール文字列ではないenqueuedジョブが完了するチャンスは全くありません
成功しました.もちろん
Dry::Struct
は検証に使用されません.がある
dry-validate
あるいはActiveModel
/ ActiveRecord
ご希望の場合は妥当性検査を行います.あなたのより多くの構造を与えるバックグラウンドジョブの引数は、システムの堅牢性を向上させます.あなたのオブジェクト
輸送において
Redis
, ジョブがエンキューされている限り、ジョブが実行されるときに期待される構造を持つことが保証されます.
上の例は以下のようにリファクタリングされます:
class SendInvitationEmailJob
include Sidekiq::Worker
def perform(params)
# code
end
end
class SendInvitationEmailJob::Params < Dry::Struct
attribute :user_id, Types::Strict::Integer
attribute :invitee_email, Types::Strict::String.constrained(format: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i)
end
job_params = SendInvitationEmailJob::Params.new(user_id: user.id, invitee_email: params[:invitee_email])
SendInvitationEmailJob.perform_async(job_params)
この時点で、私たちはハッシュの代わりにDry::Struct
?さて、ハッシュ引数は驚きにつながることができるストリングキーで逆シリアル化されます.
位置引数を削除する
バックグラウンドジョブが2つ以上の位置引数をとると
1つのstructオブジェクトを取るためにそれをリファクタ
分かりやすい名前.
Rails Worldでは、レコードを使ってジョブをenqueueするのが一般的です
id
.この模様はどこも悪い.しかし、場合によっては、開発者は
モデルの後に盲目的にモデル.
ドキュメント
使用によって
Dry::Struct
あなたが制約を表すことができる引数あなたのコードでまっすぐ.各ジョブ引数の型を記述する代わりに
簡単に時代遅れになることができ、structの属性の型を参照できます.
class Post < Dry::Struct
attribute :title, Types::Strict::String
attribute :tags, Types::Array.of(Types::Coercible::String).optional
attribute :status, Types::String.enum('draft', 'published', 'archived')
attribute :body, Types::String.constrained(min_size: 10, max_size: 10_000)
end
おそらく、上記の例では、両方の種類と制約が読みやすさを改善します.バージョン管理
この宝石を追加すると、アプリケーション内の既存のジョブを中断しません.
これはジョブのキューに登録されています
Dry::Struct
オブジェクト.パラメータ構造体に新しい属性を追加すると、すでにenqueuedされたジョブが中断されません.
いずれかを使用して構造体のバージョンには些細です
version
属性class Coupons::ApplyCouponJob::Params < Dry::Struct
attribute :user_id, Types::Strict::Integer
attribute :coupon_code, Types::Strict::String
attribute :version, Types::Strict::String.default('1')
end
またはversionedクラス:class Coupons::ApplyCouponJob::Params::V1 < Dry::Struct
attribute :user_id, Types::Strict::Integer
attribute :coupon_code, Types::Strict::String
end
警告
ジョブ処理ライブラリSideKIQと互換性があります
exq , あなたのdry ::struct引数を見捨てません.これはおそらく許容できるトレードオフです.
宝石
宝石はrubygems上でホストされていますlink ). これは2つのsidekiqを提供します
のインスタンスをシリアル化して逆シリアル化するミドルウェア
Dry::Struct
あなたの仕事の議論.インストール
宝石ファイルに宝石を追加します.
gem 'sidekiq-dry'
構成Sidekiq
宝石のミドルウェアを使用するには:# File: config/initializers/sidekiq.rb
Sidekiq.configure_client do |config|
config.client_middleware do |chain|
chain.add Sidekiq::Dry::Client::SerializationMiddleware
end
end
Sidekiq.configure_server do |config|
config.server_middleware do |chain|
chain.add Sidekiq::Dry::Server::DeserializationMiddleware
end
end
更なる読書
Reference
この問題について(サイドキイドライ), 我々は、より多くの情報をここで見つけました https://dev.to/zorbash/sidekiq-dry-17olテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol