はじめに
CYBIRDエンジニア Advent Calendar 7日目担当の @kenta_kitagawa です。
サーバサイドの業務を担当しています。
6日目は @cy_ssssさんによる「Unityにまつわる入社前後の変化」でした。
入社した頃の初心を思い出します。
今回の最終目標
弊社はマスターデータ投入の際に事前検証用のdatabaseを毎回作り、検証作業が終わったら検証用databaseを削除する運用をしています。
上記の処理に時間が掛かるので、トリガーはGUIからの操作で、削除処理はバックグラウンドで行えるようにして複数のデータベースを削除する手間を省きます。
そこで
php artisan database:drop {database_name}
上記コマンドをviewから実行し、バックグラウンドで処理できるようにします。
databaseクラスはCommandクラスを継承して実装してます。
やること
・Laravelのキューを使う
・LaravelのキューはDatabaseを使って実装
・supervisorのインストールと設定
・supervisorでキューワーカーを起動
・Controllerからコマンドを実行
環境
・Vagrant 2.2.16
・VirtualBox 6.1.22 r144080
・CentOS Linux release 7.3.1611
導入手順(view、Controllerの導入、実装は割愛)
vagrant ssh
sudo yum install supervisor
sudo vi /etc/supervisord.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
# artisanがある階層
command=php /home/hoge/artisan queue:work
# ログを吐く階層とファイル名
stdout_logfile=/home/hoge/worker.log
# commandを実行するユーザ
user=hoge
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stopwaitsecs=3600
sudo vi /etc/supervisord.conf
# 一番下の [include] の部分を変更
files = supervisord.d/*.conf
sudo service supervisord start
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
php artisan queue:table
php artisan migrate
QUEUE_DRIVER=database
$params = [
'database_name' => $database_name
];
// jobs にレコード挿入
Artisan::queue('database:drop', $params)->onConnection('database');
jobsテーブルにレコードがあるとキューワーカーが自動で処理を実行してくれます。
さいごに
今まで手動で何度もコマンドを叩いていたものをキューを使うことによって一度にたくさん実行してもバックグラウンドでキューワーカが自動で処理してくれるようになりました。
明日のCYBIRDエンジニア Advent Calendar 2021 8日目は、 @yuki_utsumi さんによる「数十TBのデータをGoogleドライブにアップしよう」です。
どんな内容なのかとても気になります!
ありがとうございました!