公式のUsageはrailsで動かす前提じゃなかったので、railsで動かす場合のUsage的な何か。 0. ばーじょん
アプリ連携を作っていた時に起きた現象なので、複数Railsアプリを起動する場合は気をつけましょう。 FooアプリとBarアプリがあって、どちらもActiveJobを使っていました。どちらもqueueの名前はdefaultのままにしていました。そして、同じRedisを共有していました。 こっちはFooアプリのジョブ。 class FooJob < ApplicationJob queue_as :default def perform puts "Foo" end end こっちはBarアプリのジョブ。 class BarJob < ApplicationJob queue_as :default def perform puts "Bar" end end そして、FooアプリもBarアプリもsidekiqを起動。 bundle exec sidekiq これで、BarJob.perfor
Rails5.2がRC2になっていたのでActiveStorageの挙動を少し調べてみました。 準備 まずActiveStorageを使うためにmigrationファイルを作成します。 bin/rails active_storage:install bin/rails db:migrate ActiveStorageではCarrierwaveなどと違いファイルの情報を別テーブルに保存するため、これを実行してActiveStorage用のテーブルを作成します。 テーブルがないと↓のように怒られます。 ActiveRecord::StatementInvalid: Could not find table 'active_storage_attachments' migrateを実行するとactive_storage_blobs と active_storage_attachments とい
候補としては以下の通り Sucker Punch gem 恐らくこれが一番手堅い選択肢 config.active_job.queue_adapter = :async 手法としてはSucker Puhchと恐らく同じ gemを入れなくて済む 本番環境では非推奨とコードに書いてあるらしい(未確認) https://dev-pupuboku.hatenablog.com/entry/2020/01/01/102415 config.active_job.queue_adapter = :inline もうこれでいいんじゃないか? 本当に非同期でやっているかは不明。要確認 「ワーカープロセスを立ち上げない非同期処理」は上記の通り問題なく実現可能な様だが、 proc/consはきちんと理解する必要がある。 proc 環境構築が楽 ワーカプロセスが不要 永続化のための仕組みが不要(redis/rd
はじめに AsyncAdapterってのは、activejobアダプターの1つでオンメモリで完結するジョブキューワーカー。 config.active_job.queue_adapter = :async 「即時実行」と「指定した時間の経過後に実行」が選べる。 ミドルウェアなしで非同期ジョブを実現できて開発環境やテスト環境での使用が推奨されている。本番で向かない理由は後述する。 実装は? このオンメモリでのジョブキューは、concurrent-rubyのScheduledTaskで実装されている。 github.com 実装シンプルで、AsyncAdapter内にSchedulerとJobWrapperクラス内でScheduledTaskのメソッドで構成している。 本番で使えるの?実用性は? 結論は本番では使ってはいけない。 メール送信とかログ的な記録が向いている、とAsyncAdapte
環境 rails 5.2 やりたいこと RSpecでいろいろテストを書いているのだが、日時が絡むテストが非常に面倒である。例えば一定時間経つと挙動が変わるとか、〜年より前、後で振る舞いが変わるテスト、など。 が、さすがRails、travel_toというヘルパーメソッドがあった。 travel_to 何ができるのかというと、現在時刻を偽装できる、つまりタイムトラベル。。。! 使い方 デフォルトでは使えないのでインクルードする。rails_helper.rbに以下追記 RSpec.configure do |config| config.include ActiveSupport::Testing::TimeHelpers end で、以下のように使える。 require 'rails_helper' RSpec.describe User, type: :model do describe
最近テストが不安定になって、その修正をしていっていたらActiveJobが絡むあたりがまた不安定になったので原因を探ろうとしたのだけれど、ActiveJobのテストの設定周りなんて久々すぎて忘れまくっていたのでここで一旦整理しておく。 テストでActiveJobを同期的に扱う ActiveJobのqueue_adapterの設定は、environmentsの各ファイルで行うべき、だそう。コメントでそう書いてあった。 # Use a real queuing backend for Active Job (and separate queues per environment) production.rbなど # Use a real queuing backend for Active Job (and separate queues per environment) config.act
test用のアダプタがあるのでそれを使うとActiveJob::Base.queue_adapter.enqueued_jobsでキューイングされたジョブを取得できるっぽい。 rails/test_adapter.rb at master · rails/rails · GitHub で、それを利用して特定のジョブクラスが引数付きでエンキューされたることをわかりやすく書けるgemがあるみたい。 github.com it 'チャットワークメッセージ送信ジョブ登録' do expect { service.send_to_chatwork rid, body }.to enqueue_a(SendToChatworkJob).with(room_id: rid, body: body) end 追記 2015.4.17 Rails 4.2.1でActiveJobがキューに入れるハッシュに変更
まとめ ActiveJob::Base.queue_adapter = :test を使うと、 ActiveJob::Base.queue_adapter.enqueued_jobs にジョブが入る have_enqueued_job マッチャーでジョブが入っていることを expect する サンプルコード it 'enqueues PaymentIntentSuccessedJob' do ActiveJob::Base.queue_adapter = :test event = StripeMock.mock_webhook_event('payment_intent.succeeded', customer: customer.id) expect { post "/webhook", params: event.to_h, as: :json }.to have_enqueued_
Suppose we have such email: class UserMailer < ApplicationMailer def welcome_email(user) @user = user mail(to: @user.email, subject: 'Welcome') end end That is delivered using default ActiveJob & ActionMailer's method: UserMailer.welcome_email(user).deliver_later. (you also need to set config.active_job.queue_adapter = :sidekiq [or some other adapter] in your application.rb to use deliver_later me
こんにちは どうも、ぷりんたいです。さいきん、 Mastodon がTwitter廃人たちの間で大ブームですね。 今日はそんな Mastodon の話……ではなく、 Mastodon でも採用されている Ruby 製のバックグラウンドジョブフレームワーク Sidekiq を軸に非同期処理の話をします。 ターゲット読者は、 Sidekiq で非同期処理をはじめたばかりの入門レベル程度の方を想定しています。 アンチパターン アンチパターンとは、一言でいえば「よくないやり方」のことです。 みなさんの現場でも当座をしのぐことだけを目的として、エイヤ設計やソイヤ実装をしてしまうこともあるかもしれません。しかし、それらはしばしの眠りの後に技術的負債、または技術的致命傷としてプロダクトに跳ね返ってきます。 そういった、現場で起こりがちな問題の早期発見や予防をするために、誤った設計や実装の例を集め分類され
Rails 5.2は、Active Storageを標準でサポートしています。これとActive Jobを組み合わせると、CSVファイルのインポートを手軽に実装できます。 Motivation CSVファイルをインポートする際、それが小さなファイルであれば、フロント側で処理を行うのがシンプルです。しかしそれが、大きなファイルや、複雑な処理を伴う場合、一旦はサーバー側にファイルを保存し、バックグラウンドでそれを処理する場合があります。 ファイルの保存に、Active Storageを使用すれば、保存先はAWS S3でも、ファイルシステムでも対応が可能です。Herokuではファイルシステムに保存されたファイルの永続化が保証されない(=サーバーに保存したファイルは、ある日突然消えることがある)ので、AWS S3などにファイルを保存することになります。 特に日本語圏のエンジニアを悩ませるのが、Mi
はじめに 大量なデータのインポートやメールの送信など、処理時間が長くなるタスクを実行する際は非同期で実行することが多いと思います。RailsではActive Jobという便利な仕組みにより、非同期処理を簡単に実装することができます。 Active Job単体でも使用することはできますが、プロセスがクラッシュしたりコンピュータをリセットしたりするとジョブが失われてしまいます。そのため、production環境では後に紹介するDelayed JobやSidekiqなどのライブラリと合わせて使用することが一般的です。 先日、業務でDelayed Jobを使う機会がありましたので、今回はActive Jobの基本的な説明と、バックエンドでジョブを実行するためのライブラリの一つであるDelayed Jobを紹介します。 Active Job 大量なデータのインポートやメールの送信など、様々な処理を非
本ガイドでは、バックグラウンドで実行するジョブの作成、キュー登録 (エンキュー: enqueue)、実行方法について解説します。 このガイドの内容: ジョブの作成方法 ジョブの登録方法 バックグラウンドでのジョブ実行方法 アプリケーションから非同期にメールを送信する方法 1 はじめに Active Jobは、ジョブを宣言し、それによってバックエンドでさまざまな方法によるキュー操作を実行するためのフレームワークです。ジョブには、定期的なクリーンアップを始めとして、請求書発行やメール配信など、あらゆる処理がジョブになります。これらのジョブをより細かな作業単位に分割して並列実行することもできます。 2 Active Jobの目的 Active Jobの主要な目的は、あらゆるRailsアプリケーションにジョブ管理インフラを配置することです。これにより、Delayed JobとResqueなどのよう
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く