Ubuntu 20.04→Ubuntu24.04にデータ移行を行った資産管理ツールsnipe-it。
その後、バージョンアップを行いましたが、それに伴うDBの不整合が問題でエラーが発生しました。
こちら、メモとして残します。
環境
- Ubuntu 24.04
- php 8.3
- MySQL 8.0.40
- Apache 2.4
- Snipe-IT v7.0.12
発生したエラー
自分のアカウントの画像を変更しようとしたところ、500 internal server errorが発生しました。
エラーの特定
- snipe-itのログディレクトリに移動
cd /home/www-data/snipe-it/storage/logs
- ログ確認
cat laravel.log |grep ERROR
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'enable_sounds' in 'field list'
プロファイルの編集にこのような機能があったことから、DBのusersテーブルにenable_sounds
やenable_confetti
列が存在しないことが原因で、画像変更時にSQLエラーが発生したと考えられます。
調査
このエラーが原因と考え、まずはsnipe-itのルートディレクトリに移動。
cd /home/www-data/snipe-it
artisan migrate
を実行。
sudo -u www-data php artisan migrate
以下のエラーが見つかりました。
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'accessories_checkout' already exists
対処を行います。
対処
MySQLでの対処
- MySQLログイン
mysql -u snipeit -p snipeit
- DB切り替え
USE SNIPEIT;
- テーブル確認
SELECT * FROM migrations WHERE migration = '2024_07_26_143301_add_checkout_for_all_types_to_accessories';
→ 結果: Empty Set
このため、これが記録されていないことが分かりました。
- 該当テーブルの構造確認
DESCRIBE accessories_checkout;
→ テーブルが既に存在しています。
このことで、マイグレーションをスキップして対応することにしました。
- マイグレーションスキップ
INSERT INTO migrations (migration, batch) VALUES ('2024_07_26_143301_add_checkout_for_all_types_to_accessories', 1);
- MySQLログアウト
exit
phpでの対応
- snipe-itのルートディレクトリ確認
cd /home/www-data/snipe-it && pwd
/home/www-data/snipe-it
を確認
- 改めてのDBマイグレーション
sudo -u www-data php artisan migrate
- マイグレーション結果
2024_08_06_175114_add_shortcuts_enabled_to_settings_table ......................................................... DONE
2024_08_07_204014_add_play_sounds_to_profile ..................................................................... DONE
2024_08_15_111816_add_confetti_to_users .......................................................................... DONE
2024_08_16_104137_add_due_checkin_days_to_settings ............................................................... DONE
今度はマイグレーションが通ったことを確認です。
- 結果反映
sudo -u www-data php artisan config:clear
sudo -u www-data php artisan cache:clear
sudo -u www-data php artisan view:clear
- Webサービス再起動
sudo systemctl restart apache2.service && echo $?
0
と表示されれば正常に再起動しています。
対処完了確認
ブラウザでsnipe-itにアクセスし、画像がアップロードされることが確認できたので、対処完了です。