Mac の Middlemanでbuild&deployしたページにアクセスできないトラブル

  • ファイルの生成は MacBook Air 上の Middleman 環境
  • 環境は さくらVPS + nginx 環境の web サーバ
  • middleman-deploy の rsync モードでデプロイ
  • http://hogehoge.com/パーフェクトRoR/1章.html のような URL にアクセスすると 404
  • それ以外のページは問題があったり, なかったりする

原因

デプロイしたファイルに日本語ディレクトリや日本語ファイル名が含まれる場合, UTF-8-MAC の文字コードの影響で 404 になってしまっていました。例えば「パ」が含まれると UTF-8 と UTF-8-MAC では異なる情報になるため, ファイルが探し出せず 404 となる。

対応

Middleman + SinatraでALOHA FISHMANSのサイトをリニューアルしました – blog.katsuma.tv の「濁点問題」のところにあるように rsync で --iconv=UTF-8-MAC,UTF-8 を渡すと手っ取り早く解決できるようです。

middleman-deploy の rsync モードには flags に rsync のオプションが渡せるので指定する。

# config.rb
activate :deploy do |deploy|
  deploy.method = :rsync
  deploy.host   = 'www.example.com'
  deploy.path   = '/srv/www/site'
  deploy.flags  = '--iconv=UTF-8-MAC,UTF-8 -avz'
end

これで問題なくアクセスできるようになりました。middleman-deploy 以外の場合には after_build でファイル名変換, 文字列変換する必要がありそうですね。