OctopressのディレクトリをDropbox内で管理してるのですが、
そうするとgenerate
、deploy
するたびにファイルが全て
更新されるので(.git
内も含め)、
そのたびにCPUやネットワークがDropbox結構使われるのが
気になる様になってきたので外に出しました。
publicディレクトリ
Octopressのpublicディレクトリは
Rakefile
のpublic_dir
及び
_config.yml
のdestination
で設定されている
ディレクトリです。
_config.yml
内の値はJekyllコマンド(rake generate
等から呼ばれる)で使われます。
両方共等しくしておかないといけません。
sourceにあるファイル群からサイトを構築して 実際にサイトとして見れる形のhtmlに変換されたファイル等がおかれます。 ローカルで試しに見て見る時はここを参照してます。
このディレクトリは単にサイト構築時に作られるだけなので 途中で消したりしても特に問題ありません。
通常はOctopressのトップディレクトリにpublic
としてあります。
deployディレクトリ
Octopressのdeployディレクトリは
Rakefile
のdeploy_dir
で指定されている
ディレクトリです。
このディレクトリはGitHub Pages等を使ってる場合に
コミット用のディレクトリになります。
publicディレクトリから内容をコピーしてきてこのディレクトリからpushします。
最初にrake setup_github_pages
とした時に
コミット用として初期化されてるはずです。
このディレクトリは別途Git管理されてるもので、.git
ディレクトリを
確認出来ると思いますが、
消してしまったら次に作業作業する前にrake setup_github_pages
などして
きちんと登録し直してあげないといけません。
(直接clone
してしまった方が楽な時もあると思います。)思
通常はOctopressのトップディレクトリに_deploy
としてあります。
問題
現在、OctopressのディレクトリはDropbox下で管理してるんですが、
これだとrake generate
なりrake deploy
なりすると
相当数のファイルが書き換わるので、
記事数が多くなってきたりするとこれらのコマンドの直後に
結構cpuやnetworkリソースを食います。
また、1つの端末で作業した後に他の端末で作業を始めようとするとき、
常時接続してない端末だと起動時に同期が行われて結構うざいです。
最近のDropboxでは各ディレクトリごとに同期する物を細かく設定できるので、 最初はこれらのディレクトリだけ同期しないようにしておこうか、と思ったんですが、 それだとdeployの方が履歴がつながらないので素直には出来ません。
その辺の問題もあるので、いっその事Dropboxの外に一時的に置いて さらにdeployディレクトリも毎回初期化して送るように push方法も変更しました。
Rakefileの変更
deploy時に使うタスクとして新たにpush_ex
というタスクを作ります。
これを使うため、deployタスクのデフォルト値としてdeploy_ex
を加えておきます。
1 2 3 4 |
|
deploy先のurlをRakefileの中で直接指定できる様にするため、
deploy_url
という値でGitのurlを与えておきます。
1 2 3 4 |
|
Misc Configsの所でpublic/deployディレクトリを変更します。
共通のtmp_dir
を親ディレクトリにして場所を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
deployタスクの中でdeployに使うタスク名を上で加えてdeploy_ex
に置換します。
1 2 |
|
最後に、push
タスクの下辺りにpush_ex
というタスクを作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
push_ex
では、毎回deployディレクトリをgitの履歴も含めて全て初期化して
からpushしています
1
。
これで単にpublic/deployディレクトリをDropboxの外にだすだけでなく、 GitHub上のレポジトリで履歴を毎回リセット出来る事になります。
基本、GitHubに置いているサイトのソース部分の履歴は 自分にとっては必要のないもの (サイト構築前のソース部分は別に履歴管理しているはずなので 2 ) で、例えばちょっと間違えて載せた物を消した、と言う時にも、 実はGitHubで履歴が見えてしまって困ります。 サイトの細かい更新履歴も意図せず公開してるのも余り嬉しくないです。
そこで、上の様に毎回リセットして送るとサイトのレポジトリは常に その時のコミットの内容しか持たないようになるのでこの様な自体を防げます。 (まあ、googleにキャッシュ取られてたり誰かに魚拓をとられてれば どうしようもないわけですが。。。)
ついでに、もしその後push_exを辞めて
通常のpushタスクでやっていくためにsetup_github_pages
をする時にも
deploy_url
を使えるようにsetup_github_pages
のタスクの中に
1 2 3 4 5 6 7 8 |
|
な感じでdeploy_url
があれば使う様に加えて置きます。
_config.ymlの変更
_config.ymlの方もdestination
でpublicディレクトリを変更します。
1 2 |
|
これで後は普通にrake generate
、rake deploy
等をするだけです。
おまけ: push前に禁止ワードをチェックする
ちょっとした書き間違いなどなら良いのですが、 例えばパスワードだとか間違えて書き記しておいたものを GitHubにpushしてしまうととても危険です。
GitHubをバックアップ代わりみたいにも使っていて、 定期的にpushするような事もしているので、 この際に変更をチェックせずに送ってしまうのは結構危険です。
そこで、少しでもその様な危険を回避するために 禁止ワードリストを作ってチェックを行っています。
禁止ワードリストは~/.gitavoid
というファイル。
ここにパスワードの一部だとか(自分専用の端末だとしても
テキストファイルに全部載せるのは危険なので)
を書いて置きます。
Octopressの場合はpublicディレクトリをdeployする前にチェックするため こんな感じでRakefileに書いておきます。
1 2 3 4 5 6 |
|
ここで途中でストップするためにok_failed_stop
という関数を追加してるので
これをok_failed
という関数の下辺りにでも追加しておいて下さい。
1 2 3 4 5 6 7 |
|
これで、もし仮に間違ってパスワードが記入されていたとしても deployの前で止まります。
また、GitHubに自動でバックアップを取るシェルスクリプトには、
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 |
|
こんな感じでレポジトリにあるファイルを全部チェック 3 するスクリプトを入れています。
毎回全部チェックするのが冗長だと思えば上の
for
文のところでコメントを 付け替えて1 2 3 4
-#for f in `echo $difffiles`;do -for f in `git ls-files`;do +for f in `echo $difffiles`;do +#for f in `git ls-files`;do
difffilesの方をチェックするようにすればOK。 ↩