rcmdnk's blog

preview [DVD]

以前のOctopressではrake previewとした時には published: falseなポストも表示されてたのですが、 最近のアップデートで出来なくなりました。

どうもJekyllのアップデートに合わせて色々やった結果の様です。

Sponsored Links

Jekyllのドラフトオプション

Jekyllの方でbuildするときに使うファイルの選び方を見てみると

Configuration

ここにあるように、以下の4つのオプションがあります 1

_config.yml 初期値 動作
show_drafts null trueにするとsource/_postsに加え、source/_drafts内にあるポストも使う様になる。jekyll build --draftとするとtrueの場合と同じ動作になる。
limit_posts 0 最新の方から数え、最大この数だけのポストを使う様になる。0の場合は全て使う。jekyll build --limit_posts NUMで同じ様にNUM個のポストだけに出来る。
future true yamlブロックのdateの時間が現在時刻より先の物を使うかどうか(日時だけでなく時刻も見る)。基準となる時間はtimezone_config.ymlで指定している場合はそれに依る。そうでなければ手元のマシンの基準時間。jekyll build --futuretrueと同じ動作に。
unpublised false yamlブロックでpublished: fasleにしているものを使うかどうか。jekyll build --unpublishedtrueと同じ動作に。

ここで、同じようなdraftのものとunpublishedの物があるのですが、 その辺に関しては以下で議論されてます。

–drafts doesn’t respect published front-matter · Issue #1337 · jekyll/jekyll

  • unpublished: 書き終えたがまだ公開したくないものとか公開を辞めたもの。
  • draft: まだ完成していない書きかけのもの。

の様に使ってるよ、と@parkrさんが言っていますが、 @iccoさんが言ってるように unpublishedの方をドラフト的に使っている、と言う人も多いはず。

ということで、unpublishedの方も同じようにJekyllのコマンドオプションからも 簡単に変更出来るようになっています。

Octopressのドラフト

Octopressではこのrake new_postsource/_postsにファイルを作るようになっていますし、 isolateタスクなどもsource/_draftsを意識した物にはなっていないので、 unpublishedな物をドラフト、として使うほうが便利ですし これまでそうしてきました。

以前のOctopressではplugins/preview_unpublished.rb というプラグインを使ってpublished: falseなものも previewの際にはtrueに変換して表示させていました。

コレを使って、最新のドラフトをのみを軽くGenerateする、 みたいなコマンドも自分で作っていました。

Octopressのgenerate_onlyをモット便利に

これが使えなくなっていて結構不便だったんですが、

published: false doesn’t work for rake preview? · Issue #520 · imathis/octopress

これを見ると、確かに今は出来なくて、次の2.1のリリースでは治す、 ということですが、いつ2.1になるのか分からない。。。

で、もう一つ、

Can’t preview drafts · Issue #1599 · imathis/octopress

こちらにも同じ様なものがあって、 上のポストと同じ内容なのでもう放っておかれてるのかな、と思っていたら 一週間くらい前に返事があったみたいで、 ここでunpublished: trueオプションどうこう言ってるのを見たので 上のを調べてみたわけです。

で、見てみると単に--unpublishedオプションを加えれば良いだけに見えるのでやってみました。

Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
diff --git a/Rakefile b/Rakefile
index 81a03df..a4137e4 100644
--- a/Rakefile
+++ b/Rakefile
@@ -65,7 +65,7 @@ task :watch do
   raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
   puts "Starting to watch source with Jekyll and Compass."
   system "compass compile --css-dir #{source_dir}/stylesheets" unless File.exist?("#{source_dir}/stylesheets/screen.css")
-  jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build --watch")
+  jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build --watch --unpublished")
   compassPid = Process.spawn("compass watch")

   trap("INT") {
@@ -81,7 +81,7 @@ task :preview do
   raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
   puts "Starting to watch source with Jekyll and Compass. Starting Rack on port #{server_port}"
   system "compass compile --css-dir #{source_dir}/stylesheets" unless File.exist?("#{source_dir}/stylesheets/screen.css")
-  jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build --watch")
+  jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build --watch --unpublished")
   compassPid = Process.spawn("compass watch")
   rackupPid = Process.spawn("rackup --port #{server_port}")

こんな感じで--unpublishedを加えてあげればOK。

これで以前と同じように

$ rake preview

とするとpublished: falseなポストも表示される様になります。

generate_onlyタスクなどについての最新バージョンはこちら

octogray/Rakefile

$ rake gen_only

とすると、source/_postsにある最後に編集されたファイルだけを ビルドします。 ポストが100も超えてくると必須。

自動投稿的な

上のを調べる過程でfutureと言う値を _config.yml内で指定できる事を知りました。

これを使うと、常時動いてるマシンがあれば、 1時間に1回くらいrake gen_deployする様にcronとかで設定しておいて、 指定時間になったら投稿する、みたいなことも出来るな、とか考えてみたり。

ただ、毎回ビルドするのも馬鹿らしいので 結局ファイルのアップデートを見てーみたいな事をしようと思うと、 その際にファイルのdateの値をチェック、みたいなことをすれば良い気もするので あまり意味ないかな。

Sponsored Links
  1. _config.yml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    ## Filtering Content
    show_drafts: null  # If true, it reads source/_drafts, in addition to source/_posts
                       # `jekyll --draft` works same as "show_drafts: true".
    limit_posts: 0     # Number of pots to be parsed.
                       # 0 for all.
                       # `jekyll --limit_posts NUM` works same.
    future:      true  # If false, do not parse posts later than current time.
                       # Depend on "timezone".
                       # `jekyll --future` works as "future: true".
    unpublished: false # If true, parse even "publised: fase" posts.
                       # `jekyll --unpublished` works as "unpublished: true".
    

Sponsored Links

« Homebrewのコマンドを作る方法 No-IPを使ったダイナミックDNSの設定 »