このブログで、カテゴリーに濁点を含んだ日本語を使うと、カテゴリーの一覧などからカテゴリーのページにリンクしたとき、 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


今回もOctopressに関する記事です。 先日、Octopressを使ってGithubPages上にブログを運営しましたが、 気が変わってレンタルしているVPS上で運営したくなりました。 Octopressではrake deployを叩くだけでRsyncを使い自分のサーバ上にコンテンツを同期することができるので、 その方法を紹介したいと思います。 Rsyncを使って同期するためには次の2つの作業をする必要があります。 公開鍵認証を使ってsshでログインできるようにする。 サーバ側の~/.ssh/authorized_keysにローカル側の公開鍵を登録する。 ここでは、serverという名前のサーバに作成済みのuserというユーザを使って、公開鍵でログインするようにするまでの手順を紹介します。 ローカル側の設定(鍵のペアの生成) まず、ローカル側で鍵のペアの生成します。 cd ~/.ssh ssh-keygen -t rsa # RSAの鍵のペアを生成する。save the keyは空白でOK。パスフレーズは任意のものを指定する。 cat id_rsa.pub # 公開鍵はサーバのauthorized_keysに後で登録するので表示しておく サーバ側の設定 公開鍵の登録 vim ~/.ssh/authorized_keys # 上で表示したローカル側のid_rsa.pubを最後の行に追加する。(ファイルがなければ作る) sshの設定 vimなどで、サーバ側の/etc/ssh/sshd_configを編集します。 間違った設定をすると最悪sshでログインできなるので注意しましょうw 私の場合はこのような感じに一部を書き換えました。 この記事を書いている私ですが、サーバの設定は初心者なので、あまり信用しないようにしましょうw あくまで参考程度で。 AllowUsers user RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys VPS上の設定が終わったら、sshdを再起動します。 /etc/init.d/ssh restart 再びローカル側の設定(sshのテスト) 以上で公開鍵を使ってsshをする準備が整ったので、テストしてみます。 cd ~/.ssh chmod 600 id_rsa # パーミションが600でないと「WARNING: UNPROTECTED PRIVATE KEY FILE!」というエラーになる。 ssh -i id_rsa user@server #これでログインできれば成功。-iで秘密鍵を指定できる。 Octopressの設定 ここまで来れば、あとはOctopressの設定だけです。Rakefileを編集します。

Read more