skip to content
barorin&?

RedmineのキューアダプターをデフォルトからSidekiqに変更する方法

/ 3 min read

Table of Contents

はじめに

Redmineの管理画面 > 情報で表示される「キューアダプターがデフォルト (開発・テスト用) 以外のものに変更済み」 に対応するための方法です。

環境

  • Ubuntu 22.04LTS
  • Redmine 5.1.1
  • Ruby 3.2.3
  • Rails 6.1.7.6
  • DB: PostgreSQL

redisインストール

公式リポジトリを追加してからapt installする。

Terminal window
$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
$ sudo apt update
$ sudo apt install redis

Sidekiqインストール

RedmineのルートディレクトリにあるGemfileにsidekiqを追加する。
私の場合はvar/lib/redmineがRedmineのルートディレクトリになっています。

  • Gemfile
gem 'sidekiq'

sidekiqをインストールする

Terminal window
$ bundle install

config/additional_environment.rbの作成

Terminal window
# Redmineのルートディレクトリへ
$ cd /var/lib/redmine
# exampleをコピーする
$ cp config/additional_environment.rb.example config/additional_environment.rb
# `config/additional_environment.rb`に`config.active_job.queue_adapter = :sidekiq`を追加
$ vim config/additional_environment.rb

ルートディレクトリで以下のコマンドを実行し、エラーが出ないか確認する

Terminal window
$ RAILS_ENV=production bundle exec sidekiq

Sidekiqをsystem serviceとして登録

sidekiq.serviceファイルを作成する

Terminal window
$ sudo vim /etc/systemd/system/sidekiq.service

中身は以下の通り。

[Unit]
# サービス説明
Description=sidekiq
# syslogとネットワークが利用可能になった後に起動するよう指定
After=syslog.target network.target
[Service]
# サービスの起動完了をsystemdに通知するタイプ
Type=notify
# どのタイプのプロセスが通知を送ることができるかを指定
NotifyAccess=all
# サービスが10秒間応答しない場合、systemdによって自動的に再起動する
WatchdogSec=10
# サービスが起動する際の作業ディレクトリを指定
WorkingDirectory=/var/lib/redmine
# production環境でsidekiqを起動
ExecStart=/usr/local/bin/bundle exec sidekiq -e production
# サービスを実行するユーザー
User=www-data
# サービスを実行するグループ
Group=www-data
# サービスによって作成されるファイルのデフォルトのパーミッションを設定
UMask=0002
# 環境変数を設定
Environment=RAILS_ENV=production
# サービスが停止した場合に、自動的に再起動するまでの待ち時間を秒単位で指定
RestartSec=1
# サービスが何らかの理由で停止した場合に、常に自動的に再起動するように設定
Restart=always
# 標準出力をジャーナル(systemdのログ)に送る
StandardOutput=journal
# 標準エラー出力をジャーナルに送る
StandardError=journal
# システムログで使用される識別子を設定
SyslogIdentifier=sidekiq
[Install]
# システムがマルチユーザーモードになった時に、このサービスが起動するように指定
WantedBy=multi-user.target

sidekiq.serviceを有効化し、起動して完了。

Terminal window
$ sudo systemctl enable sidekiq
$ sudo systemctl start sidekiq

参考

Ubuntu 22.04 LTSへの最新版Redisのインストール Sidekiq configuration