happy mergings about middleman-blog
middleman-blogに関連するいくつかのプルリクを送ったという話。ちょっとした問題を解決しようとしたら予想外にいろいろと引っかかったので覚え書きをしておく。実用的な情報はあまりない。
フィードが見つからない
r7kamura blogをフィードリーダーに登録しようとしたが、フィードが見つからなかった。
このサイトはMiddlemanを使って生成していて、GitHub Pagesを使って公開している。Middlemanを利用したブログサイトで、フィードは用意してしてもリンクを貼り忘れるというケースは時々あるようで、以前にもオートディスカバリーを追加するプルリクを送ったことがあった。GitHubのリポジトリをざっと眺めてみると、/feed.xml
があるのが確認できた。よかったよかった。
フィードが壊れている
ところが、http://r7kamura.github.io/feed.xml
にアクセスしてみると、フィードのタイトルが”Blog Name”になっていて、何かおかしい。よく見ると記事のURLのホスト名もhttp://blog.url.com/
になっている。フィードの設定がデフォルトのままになっているらしい。これでは読者である自分が困る、ということでfeed.xmlを修正するコミットをしてプルリクを出すことにした。
上記のコミットを見てもらえば分かるように、feed.xml
の実体はただのテンプレートだから簡単に書き換えることができる。ただ、site_url
という変数にホスト名を入れるという仕組みが気になった。これではブログのホストが変わるたびにフィードのテンプレートを書き換えないといけない。ホスト名抜きのURL(http://example.com/foo
ではなく/foo
と指定するようなURL)ではいけないのだろうかと思って調べてみたが、Atomのentry
要素のid
プロパティは省略不可で、内容は完全なURLでなければいけないと定められているのでどうしようもない(参照:RFC 4287 - The Atom Syndication Format, Make feed.xml entry URLs absolute by rmm5t · Pull Request #130 · middleman/middleman-blog)。とりあえず、サイト名や著者名などがconfig.rb
で定義されていたので、ドメイン名もそちらに書くように変更しておいた。
オートディスカバリーを追加する
ついでにオートディスカバリーも追加するプルリクを書こうとしたのだが、Middlemanにはブログを作るための拡張機能があるので、これを使えば簡単に雛形を生成できる
という一文が気になった。middleman-blogの雛形を確認してみると、feed.xml
はあったが、オートディスカバリーはなかった。
そのまま/feed.xml
とURLを指定するよりスマートなやり方があるのではないかと思って、Sitemapとかasset_path
メソッドの実装とかをいろいろ調べた結果、結局URLを直接書くのがよさそうだということになった。pryでメソッドを呼び出したり変数を確認したりしつつshow-method
でメソッドのコードを確認していくのが楽でよかった。
Middlemanが壊れた?
Middlemanをサーバーモードで動かしているとき、http://0.0.0.0:4567/__middleman/
にアクセスするとSitemapや設定がきれいに表示されて便利なのだが、気がついたらSitemapや設定一覧にアクセスできなくなってしまった。スタイルシートもなぜか当たっていない。設定を変更しても、これまでのコミットをリバートしても、新しいテンプレートを作っても動かない。関連しそうなGemを入れなおしてみるが改善されない。
一時間以上悩んだ気がするけど、原因は単純で、http://0.0.0.0:4567/__middleman
ではなくhttp://0.0.0.0:4567/__middleman/
を開かないといけないのだった。末尾の/
が抜けていてもそのままページは表示されるのだが、ページ内のリソースやリンクはすべて相対URLで指定されていたので、たとえば本来なら/__middleman/config
を読み込むべきところで/config
を読み込んでしまう。
テストに失敗
気を取り直してmiddleman-blogのほうにAdd autodiscovery of feed.xml to layout.erbという変更を入れてから、念のためbundle exec rake test
でテストを実行してみるとなぜか失敗した。調べてみると、もともとmiddlemanのほうに一時的にバグがあったらしい。以下のプルリクとコミットを参照。
- add the missing file back for the automatic_alt_tag feature by stevenosloan · Pull Request #1072 · middleman/middleman · GitHub
- whoops, bad rename · 95c0fe6 · middleman/middleman
必要なファイルをうっかり消していたのでrequire
でエラーが出たという単純なバグ。上記のコミットによって修正されている。
bundle install
に失敗
middlemanのバグを手元で修正してテストを走らせるべくbundle install
を実行してみるとdebuggerというgemのインストールに失敗した。ruby2.1.0-preview1で実行していたのだが、「2.1は対応していないバージョンです」という感じのメッセージが出てインストールが強制的に終了してしまう。そもそもプルリクを出すときにpreview版を使っていたのがよくなかった。
rbenvで2.0系のリリース版を入れる。gemをインストールしなおすのが面倒なのでとりあえず2.1.0-preview1のgems
にシンボリックリンクを貼って動かしてみたが、確かffiが「なんとかかんとか.soファイルが見つからないです」という感じのエラーを出したのでくじけて寝た。
プルリクを送る
当初の目的からずいぶん離れてしまったので、とにかくfeed.xmlを修正するプルリクを送った。descriptionを書き足すために編集画面を開こうとしたらすでにマージされていて、その後もいくつかプルリクを送ったら即座にマージされるという感じでテンションが上がったので、middleman/middleman-blogにもエイヤッとAdd autodiscovery of feed.xml to layout.erbを送ったら、こちらもさくっとマージしてもらえた。
その後
フィードリーダーを開いたらhappyな記事が流れてきた。