created: 2022-08-31T14:15:14.363Z

EPGStation の `update programs error` をなんとかする

前回までのあらすじ。

l3tnun/docker-mirakurun-epgstation をつかわせてもらっている。

エラー

こんなログが出て番組表が更新されず、録画ができなくなっていた。

$ tail -200 ./epgstation/logs/EPGUpdater/system.log

...

2022-08-31T11:01:03.258] [INFO] system - config.yml read success
[2022-08-31T11:01:03.292] [INFO] system - start EPG update
[2022-08-31T11:01:03.294] [INFO] system - start get stream
[2022-08-31T11:01:03.315] [INFO] system - get service
[2022-08-31T11:01:03.454] [INFO] system - start update channel
[2022-08-31T11:01:04.191] [INFO] system - done update channel
[2022-08-31T11:01:04.193] [INFO] system - get programs
[2022-08-31T11:01:04.620] [INFO] system - done get programs
[2022-08-31T11:01:04.633] [INFO] system - start update programs
[2022-08-31T11:01:05.553] [ERROR] system - update programs error

よくつくりがわからないのだが、EPGStation の番組表のUIに番組表は表示されているけれど、なぜか録画時点で読めないようで予約がスキップされている状態だった。

対処

基本的にはここを読んで書いてある通りにすればよい。

ただし、ドキュメントの記述に反して docker-mirakurun-epgstation を使っている場合でも、データベースを作り直した後に自分で文字コードを変更しておかないといけなかった。

SQL

mysqlサーバのコンテナにログイン。

$ sudo docker compose exec -u root mysql /usr/bin/mysql -uroot -pepgstation epgstation
-- ドキュメントには既存データを保護するやりかたも書いてある
DROP DATABASE epgstation;
CREATE DATABASE epgstation CHARACTER SET utf8mb4;

なお、テーブルはアプリの再起動時の処理のどこかで作り直してくれるようだ。TypeORM の synchronize が true になっているのかなと思っていたが、今見るとそうでもない。よくわからないが、restart してしばらくするとテーブルが生成される。(他人のアプリなのでよくわからなくていいと思っている)

# restart すると、その処理の中でデータベース内にテーブルが生成される
$ sudo docker compose restart

参考

このリポジトリで issue を上げる人はみんな礼儀正しいので「お世話になっております」とかから始まることも多く読み応えがある。

詳説 データベース ―ストレージエンジンと分散データシステムの仕組み
[ad] 詳説 データベース ―ストレージエンジンと分散データシステムの仕組み
Alex Petrov, 小林 隆浩 (単行本(ソフトカバー))