rcmdnk's blog

Stash

Octopressではsource/_postディレクトリ以下にある大量のpostを 一時的にstashフォルダに逃しておいて 見たい記事だけをgenerateしたりする機能 がついていますが、 source/下に直接つくるpageも多くなってくると この機能を使っても時間がかかる様になってきます。

なのでこれらのsource/直下に作るページもstashして generateとか出来る様にしました。

Sponsored Links

stashディレクトリを正しく設定

まず、前提として、下のpostに書いた様に、stashディレクトリとして full_stash_pathという変数を設定して正しくisolate/integrateが機能する様にしておきます。

Octopressでチェック用に高速にgenerate/previewする

また、加えて下に書いた様にディレクトリも移動出来る様に変更。

Octopressのgenerate_onlyをモット便利に

これをスタートとしして、 これを参考にして、source/下にあるものも同じように isolateの対象にする様に変更していきます。

stash_root

Rakefile
1
2
3
4
5
6
 stash_dir       = "_stash"    # directory to stash posts for speedy generation
 full_stash_dir  = "#{source_dir}/#{stash_dir}"    # full path for stash dir
+stash_root_dir  = "_stash_root" # directory to stash pages (in /source/)
+full_stash_root_dir = "#{source_dir}/#{stash_root_dir}" # full path for stash_root dir
+root_stashes    = ['mac', 'windows', 'others', 'privacy', 'rawhtml', 'search_test'] # directories to be stashed in /source/
 posts_dir       = "_posts"    # directory for blog files

まず、通常のstash_dirに加えて、stash_root_dir及び full_stash_root_dirという変数をRakefileに加えます。

stash_root_dirは対比させたいページを入れておくディレクトリ名で、 full_stash_root_dirfull_stash_dir同様source_dir下等、 Rakefileのある位置からのFullパスになります。

また、root_stashesという値にsource/から対比させたいディレクトリを 配列か、もし一つだけなら文字列で設定します。

次に、isolateタスクの中でroot_stashesを退避するようにコマンドを追加します。

Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 # usage rake isolate[my-post]
 desc "Move all other posts than the one currently being worked on to a temporary stash location (stash) so regenerating the site happens much more quickly."
 task :isolate, :filename do |t, args|
   FileUtils.mkdir(full_stash_dir) unless File.exist?(full_stash_dir)
   Dir.glob("#{source_dir}/#{posts_dir}/*") do |post|
     FileUtils.mv post, full_stash_dir unless post.end_with?(args.filename)
   end
+  FileUtils.mkdir(full_stash_root_dir) unless File.exist?(full_stash_root_dir)
+  if defined? root_stashes == nil
+    if root_stashes.class == String
+      FileUtils.mv "#{source_dir}/#{root_stashes}", full_stash_root_dir
+    elsif root_stashes.class == Array
+      for d in root_stashes do
+        FileUtils.mv "#{source_dir}/#{d}", full_stash_root_dir
+      end
+    end
+  end
   system "touch .isolated"
 end

最後にintegrateの方でも元に戻す様に追加。

Rakefile
1
2
3
4
5
6
7
8
9
 # usage rake isolate[my-post]

 desc "Move all stashed posts back into the posts directory, ready for site generation."
 task :integrate do
   FileUtils.mv Dir.glob("#{full_stash_dir}/*"), "#{source_dir}/#{posts_dir}/"
+  FileUtils.mv Dir.glob("#{full_stash_root_dir}/*"), "#{source_dir}/"
   system "rm -f .isolated"
   system "touch .integrated"
 end

結果

今、http://rcmdnk.github.ioとして作ってる中には WindowsMacのページがあって数ページですが そこそこ大きいページが入ってます。

これらを上の方法で退避して最近のページをgenerate_onlyしてみると、 かかる時間は5秒くらいで、退避させないと8秒くらいかかっているので、 何度も繰り返して行うような場合なんかには多少は良くなるかな、と。

Sponsored Links
Sponsored Links

« Mac 10.10 Yosemiteでのホスト名の設定 最新体重計を徹底比較(記録を残せる体重、体脂肪計 »