.htaccessをおいたとたんに500 Internal Server Errorが出る場合

Homebrewを使ってWebサーバーを構築した場合、.htaccessファイルを置いたとたんに500 Internal Server Errorが出ることがある。

/usr/local/etc/httpd/httpd.conf

<Directory "/usr/local/var/www">
    AllowOverride All
</Directory>

とするだけではなく、

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

のコメントアウトを外す必要がある。

WordPressとPHP 7.2

WordPress (4.9.4) はPHP 7.2の環境下ではエラーを吐き出す (いくつかのテーマがPHP 7.2に対応していない)。Homebrew環境であれば、/usr/local/etc/php/7.2/php.iniの

display_errors = On

を、

display_errors = Off

にしておけばとりあえず画面上のエラー表示は抑止できる (もちろん根本的な解決法ではない)。

HomebrewでApacheをインストールした場合の80番ポートの動作

Homebrewを使って10.13 (High Sierra) にApacheをインストールするとデフォルトでは8080ポートで動作する。これを80番ポートで動かすためには、httpd.confに

Listen 80
ServerName localhost:80

とするだけではなく、Apacheの起動時に

# sudo brew servicses start httpd

としなければならない (sudoにしないといけない)。sudoしないと80番ポートの場合はApacheが動かないので注意。sudoしなくても8080ポートでは動くのでしばらく訳がわからなかった。

LG UltraFine 5K DisplayはMac mini向きではない

LG UltraFine 5K Displayを現在一時的にMac mini (Late 2014、つまり最新型) で運用しているが、Mac ProやMacBook Proと異なり、5K解像度が使えない上に4Kや2Kで表示した場合でも文字がぼやける (Retina的に表示してくれない) のでいまいち。デフォルトの解像度は4Kで、2Kで表示するよりはまだましだが、文字が小さくいからボケが目立たないだけなのかもしれない。Mac Proで2K表示する分にはRetina表示でとてもきれいなので、Mac miniはRetinaに対応していないということだろう。
LG UltraFine 5K DisplayはMac ProかMacBook Pro以外で使おうとはあまり考えないほうがよさそう。

Moodle (3.2.2以降) のutf8mb4対応について

Moodle 3.2.2からデータベースがutf8mb4に対応するようになったそうで、utf8で運用していると以下のようなエラーが出るようになった。

そこであちこち調べてMySQLのmy.cnfに以下の記述を追加した。

[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
innodb_large_prefix = ON
innodb_file_format_max = Barracuda

これだけではだめで、既存のデータベーステーブルを全てutf8からutf8mb4に変換する必要がある。以下のようなファイルをhoge.shなどという名前で保存し、sh hoge.shで実行すると自動的にutf8mb4に変換される。your_dbname、your_dbuser、your_passwordのところは自分の環境にあわせて変更する (Yさんからスクリプトをいただきました。ありがとうございます!)。なお、このshファイル自体はutf8で保存しないとうまく動かない。

#!/bin/sh
DB="your_dbname"
USER="your_dbuser"
PASS="your_password"
(
 echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
 mysql -p$PASS -u $USER "$DB" -e "SHOW TABLES" --batch --skip-column-names \
 | xargs -I{} echo 'ALTER TABLE `'{}'` ROW_FORMAT = DYNAMIC; \
 ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; \
 ALTER TABLE `'{}'` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
) \
| mysql -p$PASS -u $USER "$DB"