Nextcloudをアップデートするたびに、「One or more mimetype migrations are available」という警告が表示されていました。これまでは RepairMimeTypes.php の一部を修正して対応していましたが、それが通用しなくなってしまいました。
SSH を使った対処方法はいくつかあるようですが、今回はレンタルサーバーで SSH を使わずに解決する方法を見つけたので、試した内容を備忘録として残すことにしました。
使用しているレンタルサーバーはエックスサーバーです。
毎回表示される警告の一部
アップデートを行うたびに表示される警告です

One or more mimetype migrations are available. Occasionally new mimetypes are added to better handle certain file types. Migrating the mimetypes take a long time on larger instances so this is not done automatically during upgrades. Use the command `occ maintenance:repair --include-expensive` to perform the migrations.
いままでは、ファイルの一部を修正して警告を消すようにしていました。
ところがこれでは警告が消えない場合もあるようです。
現在、2つのNextcloudを設置しています。2つのうち1つはバックアップ、テスト用として設置しているのですが、上のファイルの一部を修正して、1つのNextcloud は警告が消えるのに、もう一つの方は消えないという現象が起きています。環境は同じで、Nextcloudを初めにインストールしたときのバージョンが違うくらいです。
とりあえず対処すべくいろいろと調べるとレンタルサーバーのSSHコマンドを使っての対処方法は見つかったのですが、SSHは知識がないためほとんど使わないことからSSHを使わずに対処する方法をChatGPTで調べたところ、対処することが出来ました。
今回の対処したバージョンは、Nextcloud Hub 9 (30.0.8)です。
対処方法
対処方法は、SSHコマンドの代わりにエックスサーバーのCRON設定を使って対処する方法です。
これならエックスサーバーの管理画面で対処することが出来ます。
CRONでocc maintenanceを実行させる
エックスサーバーのサーバー管理よりCRON設定追加を行います。
今回は1回だけすぐに実行したいので、時間を5分後に実行するように設定します。

CRONのコマンドは下記となります。
/usr/bin/php8.1 /home/ユーザー名/nextcloud/occ maintenance:repair --include-expensive
黄色のハイライトのphpの部分は使用中のバージョン、青色の部分はNextcloudがインストールされているアドレスに変更してください。(occ.phpファイルのあるアドレスになります。)
Nextcloudをドメイン直下、public_htmlに直接インストールしている場合は、こんな感じで
/usr/bin/php8.3 /home/ユーザー名/XXXXXX.com/public_html/occ maintenance:repair --include-expensive
CRONで実行後、警告が消えたらCRON設定を削除して終了です。
警告が消えない場合、Nextcloudのルートダイレクトリーにある ”occ.php” ファイルのパーミッションをエックスサーバーのファイル管理より "644" から ”744”に変更してCRONを再度実行、警告が消えたらパーミッションをもとの ”644”に戻す。
警告が消えない場合は、次の対処方法へ進み、警告が消えるた時点でパーミッションを元に戻す。
CRON実行でエラーが出る
今回パーミッションを変更しCron実行後、メールで下記のようなエラーメッセージが届いてしまいました。
Nextcloudの警告はまだ表示されています。
An unhandled exception has been thrown:
OCP\HintException: [0]: Memcache OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)
内容は、Nextcloud が APCuをローカルキャッシュとして使用しようとしているが、サーバーでAPCuモジュールが有効になっていないというもののようです。
さっそく追加で対処していきます。
①サーバーパネルからphp.iniの設定を変更してみる
エックスサーバーのサーバーパネルの ”php.ini設定” を開き、APCuキャッシュを使えるように下記記述を追加します。
apcu.enable_cli=1
追加が出来たら、CRONを再度実行します。
php.iniに追加設定をしても同じエラーメッセージが来てしまいました。
ということで、いったんphp.iniに追加した apcu.enable_cli=1を削除し、次の対処へ。
②Nextcloudの config.php を修正してみる
次に、Nextcloudで設定されているAPCu を無効にし、Filesystemキャッシュに変更してみます。
エックスサーバーのファイルマネージャーで Nextcloudの”config.php” を開き記述の一部を変更します。
ファイルの場所 は,Nextcloudの”config フォルダ”の中にある”config.php”です。
変更するのは1か所、memcache.local の設定でAPCu使用になっているのをFilesystem Cache使用に変更する
'memcache.local' => '\OC\Memcache\APCu',
を
'memcache.local' => '\OC\Memcache\Filesystem',
に変更する
変更前 'memcache.local' => '\OC\Memcache\APCu', (APCuを使用)
変更後 'memcache.local' => '\OC\Memcache\Filesystem', (Filesystem Cache を使用)
変更を保存したら再度、CRONを実行させる。
今度は、下記のようなメールが来ました。
An unhandled exception has been thrown:
OCP\HintException: [0]: Memcache OC\Memcache\Filesystem not available for local cache (Is the matching PHP module installed and enabled?)
内容は、Nextcloudが Filesystem キャッシュを使用しようとしたが、使用できないとのこと。
ということで、次の対処へ。
③ 'memcache.local'をコメントアウトしてみる
'memcache.local' => '\OC\Memcache\APCu'でつまづいているようなので、この部分をコメントアウトし、設定を一時的に無効にしてみます。
コメントアウトは”//”を期日の前に追加するだけです。
// 'memcache.local' => '\OC\Memcache\APCu',
コメントアウト出来たら、CRONを再度実行します。
警告が消えたら、コメントアウトしたものを元に戻します。
これで警告が消え、エラーメッセージも来ませんでした。
やっと対処終了です。これで消えました。
さいごに
SSHコマンドを使わない対処方法でしたが、ファイルを編集する場合には必ずバックアップ等を取ることをお勧めします。
エックスサーバーでの対処方法を掲載していますが、他のレンタルサーバーでも同じ内容にて対処可能だと思いますのでご参考になれば幸いです。
また、警告がまだ消えないという場合、ChatGPTで検索してみると解決策が見つかるかもしれません。
コメント