作成したrubyスクリプトを定期的に実行させるために、sidekiqというgemを使うといいと教えてもらいました。下記の記事を参考にしていたのですが、かなりつまづいてしまいました。その際に必要だったことをメモしておきます。
perform_async()でエラーが出て、sidekiqが終了する
必要なターミナルは3つでした。railsコンソール、sidekiqとredis-serverです。brewでredisをインストールすると、redis-server
コマンドでPort6379にサーバが立ち上がります。sidekiqを立ち上げるだけではダメでredis-serverも平行して起動していないとダメでした。
redisって何?
メモリ上にKey-Valueストア(KVS)を構築することができるソフトウェアの一つ。 KVSは任意の保存したいデータ(値:value)に対し,対応する一意の標識(キー:key)を設定し,これらをペアで保存するデータベースの一種で,Redisはコンピュータのメインメモリ上にKVSを構築し,外部のプログラムからデータの保存と読み出しができる。 保存する値(value)として様々なデータ構造を利用することができ,文字列,バイナリデータ,リスト,集合(セット),ハッシュなどを保存することができる。
WebStorageみたいなものかと思います。ここにsidekiqのタスクが登録されていくのかと。
Workerのputsがどこに出力されるのか?
下記のようにファイルのWorkerで文字列を出力するようにしました。この場合の出力先は、railsのコンソールなのかと思っていましたが、sidekiqの方に出力されました。
# app/workers/event_worker.rb
class EventWorker
include Sidekiq::Worker
sidekiq_options queue: :event
def perform()
puts "perform"
end
end
いつタスクが実行されるのか?
rails c
でコンソールを立ち上げて、EventWorker.perform_async()
で"cd8512e529e90aec643a433d"と文字列が返ってきます。おそらく実行されたタスクIDかと思います。sidekiqを立ち上げているターミナルを見ると、"perform"と表示されていました。