このブログで、カテゴリーに濁点を含んだ日本語を使うと、カテゴリーの一覧などからカテゴリーのページにリンクしたとき、 404エラーになってしまう問題が起きました。 原因は、このブログの開発環境にありました。 このブログは静的コンテンツなのですが、次のような手順でブログを運営しています。 (Rakefileで自動化されていますが、内部ではこうなっています) ローカル(Mac OS X)でブログを生成する。 サーバ(Ubuntu)にRsyncで生成したブログをアップロードする。 Mac OS X では、ファイル名のエンコードにUTF-8-MACを使っているので、 そのままアップロードすると、サーバ上のファイル名もUTF-8-MACになります。 しかし、ファイル自体のエンコードはUTF-8でURLをパーセントエンコーディングしていないので、 リンク先が見つからなくなってしまうようです。 UTF-8-MAC問題について詳しく知りたい人は、こちらなどが勉強になるとおもいます。 解決方法は簡単で、Rsyncでアップロードするときに、–iconvオプションを使い、 ファイル名をUTF-8-MACからUTF-8に変換すれば治ります。 Rsyncのバージョンを3にする Rsyncの–iconvオプションが使えるのは、Rsync3からなのでアップデートします。

brew tap homebrew/dupes #リポジトリを追加(2019/06/20追記。この手順は不要になりました。) brew install libiconv #iconvオプションを使うために必須のよう brew install rsync 念のため、サーバ側(Ubuntu)のrsync3にします。

aptitude install rsync Rakefileを修正する Rakefileのok_failed system…の行を書き換えます。 desc "Deploy website via rsync" task :rsync do exclude = "" if File.exists?(‘./rsync-exclude’) exclude = "–exclude-from ‘#{File.expand_path(‘./rsync-exclude’)}’" end puts "## Deploying website via Rsync" #ok_failed system("rsync -avze ‘ssh -p #{ssh_port}’ #{exclude} #{"–delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}") ok_failed system("rsync –iconv=UTF-8-MAC,UTF-8 -avze ‘ssh -p #{ssh_port}’ #{exclude} #{"–delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}") end 完。 これでうまくいきました。

Read more