skip to content
barorin&?

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

/ 3 min read

はじめに

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

環境

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

redisインストール

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

$ 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をインストールする

$ bundle install

config/additional_environment.rbの作成

# 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

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

$ RAILS_ENV=production bundle exec sidekiq

Sidekiqをsystem serviceとして登録

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

$ 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を有効化し、起動して完了。

$ sudo systemctl enable sidekiq
$ sudo systemctl start sidekiq

参考

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