はじめに
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