Gentooで Octopressを運用開始するまでの手順をメモに残す。

RubyもOctopressも運用経験がまったくない、と言う人(私もそう)でも、 2014/10付近のGentooでなら、以下の手順でうまく行くのではないかと思う。 無駄なことをしてしまっているかもしれないが。

デプロイについては、私は横着してデプロイ不要にしてしまったので、勉強中ということにしてください。

{:TableOfContents}

トラブルシューティング

  • bundle install / update などでエラー

一般ユーザーでのデフォルトのgemインストール先 ~/.gem があれば、下記手順だと参照されるので、 コマンドラインオプションや環境変数でそれを止める。 そんなもの作った覚えはない、なら多分 bundle installに –pathを指定し忘れたため出来たのだろう。~/.gemを消す。

  • rootを変更したら、rekeのプレビューがおかしいんだけど?

_config.ymlの root : / を変更するだけでは不足。幾つものファイルに手を入れる必要があるが、rakeがしてくれる。

bundle exec rake set_root_dir[/<subdir>]

下準備

  • ruby無しの、かなりプレーンな状態からスタートする。
  • 必要なライブラリを、octopress用ディレクトリにインストールする。

ruby他のインストール

ruby, bundler, gitが必要。

# emerge ruby bundler dev-vcs/git

ruby 2.0などもインストールされる場合は、1.9 を eselectしておく。

# eselect ruby list
Available Ruby profiles:
  [1]   ruby19 (with Rubygems) * # 19ならこのままで良い
  [2]   ruby20 (with Rubygems)
# eselect ruby set 1
Successfully switched to profile:
  ruby19

bundler について

今回のOctpressインストールでポイントだった、bundlerの超概略 (コマンド名はbundle、rなし)。

  • 必要なライブラリの依存関係を Gemfileに書いておけば、 bundlerがダウンロードしてくれる。

    $ bundle install --path <インストール先>
    

    --pathはオプションで、インストール先を、 アプリケーションのディレクトリなどに変更できる。

  • インストール後の環境内で、コマンドを実行させることもできる。

    $ bundle exec <コマンド>
    

Octopressにも、Gemfileが付属している。

Octopressインストール

Octopressのイメージをgithubからcloneする。

$ git clone git://github.com/imathis/octopress.git octopress
$ cd octopress

依存するソフトの追加指定

jsonとrubyracerが足りず、rakeが失敗したため、 これらを Gemfileに追加することで対処した。 rubyracerはjavascriptのランタイム。

$ vi Gemfile
gem 'json', '~> 1.8.1'
gem 'therubyracer', require: "v8"

依存ソフトのインストール

./vendor/bundleにインストールする。LC_ALL=Cは重要で、LC_ALL=ja_JP.UTF8だとv8のインストールに失敗する。

$ LC_ALL=C bundle install --path vendor/bundle --binstubs vendor/binstubs

binstubsは選択肢。

デフォルトテーマのインストール

$ bundle exec rake install

html生成、プレビュー、投稿

まず生成。え、順序がおかしいですか?でも最初にサイト構築の動作チェックをしたいよね。 次のコマンドで、全ソースの変換が行われ、/public にサイトイメージが構築される。

$ bundle exec rake generate

プレビューする。簡易サーバーが、tcpポート4000で動作する。 プレビュー中にソースを書き換えると、直ちに変換してくれる。便利。

$ bundle exec rake preview

投稿は、

$ bundle exec rake new_post["title"]

などとする。 /source/_post/ 以下に配置される。

楽に更新したい

新規投稿には、bashで次のエイリアスを使っている。

$ alias opost='(cd <octopress>; bundle exec rake new_post)'
$ opost
Enter a title for your post:<記事名>

既存記事の編集は、

~ $ ln -s <octopress>/source/_posts ~/posts
~ $ alias o='(cd <octopress>; bundle exec rake generate)'

としておけば、この記事の編集なら

~ $ vi posts/*octo* ; o
~ $ o

で済む。複数が該当したら、 viの :n で次の記事へ。

プレビューしながら編集したければ、

~ $ alias op='(cd <octopress>; bundle exec rake preview)'
~ $ op

を、screenやtmuxの別タブで走らせておけば楽。 wyswygのDiscontエディタがあれば、良いかも。Markdownのwyswygとしては、stackEditなどがある。

運用

Octopressのアップデート

準備:本家のリモート名をoctopressに

git cloneしたため、インストール後のoriginは、本家を指している。 バージョン管理にoriginを使いたいため、変更する。

$ git remote rename origin octopress
本家の更新を取り込む
$ git fetch octopress
$ git merge octopress master
gemsも更新できる
$ bundle update

rsyncによる同期

リモートホストとローカルのホームディレクトリに、それぞれ~/octopressがあるとする。

  • リモートの変更にローカルを同期させる

    rsync -av <remote\>:octopress/ ~/octopress/ --exclude="vendor" --exclude=".bundle" --exclude="Gemfile*"
    

幾つか--excludeしているのは、コピーすると bundle, rake がうまく動かなかったから。それぞれのホストで一旦上記手順でOctopressを立ち上げてから、同期を使うようにする。

gitを用いたバージョン管理

自分のリモートリポジトリを登録し、デフォルトブランチとする。(先に上記のように、本家のリモート名をorigin以外にしておいてから)

$ git remote add origin <url>
$ git config branch.master.remote origin

###deploy不要な私のローカル編集・サーバー似非デプロイ手順(git+ssh)

  • 編集・プレビューはローカルでサクサク行いたい。
  • webサーバーホストで rake generateすると、公開ページが更新されるとする。
  • 適当なgitリモートリポジトリにpush / pullできるとする。

手順:

  1. ローカルで編集・プレビュー(screenやtmuxでb(略) rake previewしながらvimで編集。:wで更新されるのがcool)

  2. gitでadd -A commitする。

  3. git push、リモートでgit pullして bundle exec rake generate

    $ git push; ssh <リモート> "cd ~/octopress; git pull ; bundle exec rake generate"