Gistを新たに載せようと思ったら なにやらURLが見つからないとのエラーが出て 新たにGist入のページが作れなくなってたんですが、 どうやらGitHubでのGistのURLが変更されたみたいです。
さらに変更
エラー
新たにGist入りのページ{% gist xxxx %}
を作って
generate
してみたところ
$ rake generate
## Generating Site with Jekyll
unchanged sass/screen.scss
Configuration from /octopress/_config.yml
Building site: source -> public
Liquid Exception: Gist replied with 302 for https://raw.github.com/gist/6824298/ in 2013-10-04-test.md
/octopress/plugins/gist_tag.rb:88:in `get_gist_from_web'
/octopress/plugins/gist_tag.rb:27:in `render''`'`
こんな感じのエラーが出て作れなくなってました。
このページを外して既にGistが入ってるページ有りきでgenerate
する場合は大丈夫。
Octopressのissueを見に行ったらやはり指摘されていて、
ちょっと前にGitHubのGistのraw
のURLが変わった様です。
以前は
https://raw.github.com/gist/GIST_ID/ (+FILE_NAME)
と言った形だったのが
https://gist.github.com/raw/GIST_ID/ (+FILE_NAME)
こんな感じに。 さらにこのページは
https://gist.github.com/USER/GIST_ID/raw(+/FILE_NAME)
というページにリダイレクトされます。 以前どうだったかイマイチ覚えて無いですが、Gistの各ページも
https://gist.github.com/USER/GIST_ID/
の様に今はユーザー名が入るようになっています。
各Gistページは今もUSER
を除いても上のURLへリダイレクトされる様になってるみたいですが、
raw
のページの場合は
https://gist.github.com/GIST_ID/raw(+/FILE_NAME)
の様に書いてもリダイレクトされません。その代わりに上に書いた
raw
ディレクトリが用意されているのかも。
いじれにしろ、このraw.github.com
のURLをgist_tag.rb
がチェックしていたので
古いURLを見に行って無いよ、と言われてたわけです。
以前、既にGistを入れていたページについては、raw
ページのキャッシュが
.gist-cache
に残っていて、ある場合は上のraw
のチェックを行わないので
OKだった模様。
(ただし、下に書く様に何かが変わっている。。。)
対処法
Ocotpressのissue/pull requestを見に行ったら半月ほど前に気付かれて議論されてる途中でした。
上の方では/USER/GIST_ID/raw(+/FILE_NAME)
を取りに行っています。
この場合はユーザー名が必須なので自分のGitHubのユーザー名を
_config.yml
から取ってきたり
引数で与えたり(もしくはGIST_IDの前にユーザー名をつけたり)
してますが、場合によってはこれまでの記事の書き換えが必要になるので面倒です。
下の方は/raw/GIST_ID/
の方を使っているので、これまでと殆ど変わりありません。
最終的にOctopressでどの様な形を採用するかわかりませんが、 取り敢えず現状自分で入れた対処法は下の方を採用してこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
|
これ自体、新しいGistですがきちんと表示されています。
下の方のpull requestにある内容だと最後にdata
が余計に取られてるので注意です。
このgistのURL変更に加えて、renderの最初でtext
を評価してる部分を変更してあります。
変更前を見ると分かる通り、例えばGIST_IDだけを与えるとき、
{% gist 6840247 %}
最後に%
の前に空白がないと
弾かれてコードが載りません。
エラーも出ないのでたまにこの間違いをして
コードが載ってないのに後から気づいたりしました。
前はプラグインの中を見てなかったので、数字を入れる場合は%
の前だと空白を
入れないと悪さをするのかも、とか思ってましたが、
単にgist_tag.rb
の問題でした。
勿論、他のタグの場合は最後に空白はあっても無くても大丈夫です。
さらにif
全体を見ると、
余計な物が入っていたりそもそもGIST_IDを与えない場合はエラーを出さずに
空欄にする仕様みたいですが、
むしろエラーを出してもらった方が嬉しいと思うので
上の様にtext
内に空白がある(gistタグの引数として2つある)場合は2つ目をファイル名に、
ない場合には全体をGIST_IDとして渡してしまって、見つからない場合は
その後のチェックでエラーを出して貰えばよい、というようにしてあります。
それから、自分のバージョンは古いのでtext
の中から
GIST_IDを数字だけで検索してましたが、
文字列も含むようになった?らしいので
1(自分のとこでは今のところないですが)
現在のOctopressのmasterにあるgist_tag.rb
にならって
文字列検索も追加してあります。
キャッシュされるraw
のコード
上で問題となってるのはraw
の部分なんですが、
以前、キャッシュされてるファイルを見ると中身が空でした。
実際、Gistを載せてあるページのhtmlを見てみると
1 2 |
|
の様にnoscript
内のcode
に記述がありません。
JavaScriptが動かない環境では見たことがなかったので気づかなかったんですが、
今まではすべてこうだったようです。
これが、今回のURLのアップデートの結果かどうがわからないですが、
今回新しく付けたGistはちゃんとcode
内にコードが載ってます。
(このページのソースを見てみてください。)
以前もエラーは出てなかったし、ちゃんとURLを見に行ってたはずなんですが。
Gistのページを直接貼り付ける
ちなみに、今回Gistでエラーが出るようになった時にちょっと検索してたら こんなものを見つけました。
Ref: SEO Friendly Gists
このGeneratorは元々、Gistのページで用意されているJavaScriptだけ貼り付けるとコードが
ページには貼り付けられないのでSEO的に弱い、ということから
コードも貼り付けよう、と言うことで作られたみたいなんですが、
上のgist_tag.rb
がやってることと全く同じ事をしてくれます。
Octopress以外で、Gistをちょっと貼り付けたいときに 適当なツールが無いときにnoscript付きで貼り付けたい時には便利かな、と。
rake cleanの 不具合?
ここで今回もう1つ気づいたのが、キャッシュが残ってるから。。。
という時に、そういえばrake clean
でキャッシュとか消さないんだろうか?
と思って見てみたら
desc "Clean out caches: .pygments-cache, .gist-cache, .sass-cache"
task :clean do
rm_rf [".pygments-cache/**", ".gist-cache/**", ".sass-cache/**", "source/stylesheets/screen.css"]
end
こんな感じでやはり消すようになってました。
今回上手く行かなくなった後も、取り敢えずrake clean
してみて、という風に
実行してるので、キャッシュが残ってる事自体がおかしい訳です。
Ref:
Octopress - rake clean 不具合! http://www.mk-mode.com/octopress/2013/07/24/octopress-problem-rake-clean
こちらの方のブログを見ると、そもそもrm_rf
の使い方がおかしいようだ、とのこと。
(ワイルドカードの指定が間違っている。)
Octopressのpull requestにも似たようなのがあったのですが、
2年前にポストされたもので、対処されないまま1年前にcloseされてます。
環境に依るのかもしれませんが、自分の手持ちのMacやCygwinなどでは 全部上手く行きません。 先に上げた方のブログの人もrubyのバージョンを戻したりしても駄目だったとのこと。
取り敢えず上の2つには同じ様にglob
を使った対処法が載ってるので
こんな感じで変更。
これでrake clean
をしてみるとちゃんと.gist-cache
の中身が消えました。
自分のところでこれまできちんと消せてたかわからないのですが、
さしあたり、screen.css
については直接ファイル指定をしてるので、
毎回rake clean
した後にgenerate
するとscreen.css
を作り直します、
みたいになるのできちんと消えてると思ってました。
ただ、キャッシュに残ってたファイルを見てみたら、一番古いGistでも それを初めて使った日付で作られてたままだったので、 どうもこれまで一度もきちんとキャッシュを消して無かったようです。。。
Octopress公式で無視されたのが、環境依存によるもので他の人には問題になってないのか キャシュなので、大概の場合は問題にならないので見逃してる/無視してるのかわかりませんが、 掃除したつもりなのに掃除されてないのは良くないのでやはり直しておきたい所。
Octopressのコードの表示@Octopress2.5
OctopressのGistのコード表示はGitHubの仕様変更によって だいぶ前から表示がおかしくなってました(行数とコードがちぐはぐになったり)。 この辺りは
Ref: OctopressのGist表示の調整
のところで以前直しました。ただ、まだおかしな所があって直しきれてません。
後、色も暗いのも明るいのもちょっと気に入らなかったので自分で作ってます。
Ref: ソースコードの表示色
上のGistの問題があってからOctopressの公式ページを除いてみたら、 Gistの問題は治ってるし、 また、ハイライトも落ち着いた感じのいい感じになってます。
Ref: Gist Tag
Ref: Include Code
追記: 2013/09/15
よく見たらちょっとおかしな表示になってます。
ファイル名無しの物はgistのURLへのhtmlのコードになっていて、 ファイル名を指定したものはそのgistのページそのもの?のhtmlが コードの所に書かれてます。
Gistに関して、2.5を取ってきて試してみたところ、 取り敢えず現在あるファイルは壊れてて上手く出来ず、少し前の historyをさかのぼって消された関数とかを入れることで なんとか通りましたが、上の様におかしな表示になってます。
取り敢えずやろうとしてることはGitHubで提供されてるJavaScript を無視して直接コードを取ってきて通常のcodeblock同様の 形にしてしまおう、ということっぽいです。 (仕様変更がちょこちょこ起こるので)。 ただ、2.5とかはまだちゃんと整備されてません。
追記ここまで
変更日が書いてないですが、ちょっと前まではコードは濃いグリーンの背景の 昔のままで、Gistも行数がずれたままだったので最近ページを作り直したみたいです。
この色は、現在のOctopressのmasterではなくて、
2.5
のブランチにあるsass
のファイルを使うと出来ます。
2.5
自体は、色々と仕様変更があって、プラグインなどが素直に使えなかったりするので
導入は結構面倒そうですが、sass
のファイル郡だけであれば導入は簡単です。
もし、自分で変更して無ければ
2.5ブランチにあるファイル
で自分のsass
にあるファイルを上書きしてあげればOKです。
ちょっと自分でいじったところとの対応を考えながら変更を加えないと行けないですが、 Gistとかの枠組みとか、上手く言ってないところは取り入れたいと思ってます。 ハイライトの色も結構いい感じだと思います。