やりたかったこと
- nanoc で静的サイトを作成
- Capistrano で output ディレクトリの内容のみ
:deploy_via, :copy
でデプロイ
やり方
前提
- 既に何らかの nanoc プロジェクトが手元にある
- Mac OSX 10.8/Ruby 2.0.0-p247 で確認(その他の環境では未確認)
Capistrano のインストール
Gemfile
に下記を記述して、 bundle install
します。
gem 'capistrano'
gem 'capistrano_colors'
gem 'railsless-deploy'
railsless-deploy は、Capistrano を Rails 以外で使えるようにいろいろしてくれる gem です。Capistrano の標準タスクには、 Rails のデプロイを前提とした実装が含まれているので、非 Rails でそのまま使うとエラーになります。
ちなみに、今回 Capistrano 2系を使ったので railsless-deploy が必要ですが、3系では Rails 用タスクが分離されるようなのでコレは不要です。と、 railsless-deploy の GitHub にも書いてあります(以下、 GitHub より引用)。 railsless-deploy 自体も既に Obsolete です。
Note: Capistrano 3 (http://www.capistranorb.com/) doesn't ship with any Railsisms, and is better in almost every measurable way than Capistrano 2 + raileless-deploy. It's time to switch, as I won't be maintaining this Gem anymore!
Capistrano のセットアップ
capify
しても良いのですが、自分は手動で Capifile
を作成して以下のように記述しました。
require 'railsless-deploy'
Dir.chdir 'output'
set :application, 'hoge.com'
set :repository, '.'
set :user, 'username'
set :use_sudo, false
set :scm, :none
set :deploy_via, :copy
set :deploy_to, "/var/www/#{application}"
set :ssh_options, auth_methods: ['publickey']
default_run_options[:pty] = true
server 'www.hoge.com', :web, primary: true
ここで重要なのは、
Dir.chdir 'output'
です。通常 Capistrano は、Capifile のあるディレクトリ全体をデプロイ対象としますが、今回は nanoc でコンパイルした静的コンテンツが入っている output ディレクトリの中身のみをデプロイする必要があります。
でも、ソースを読んだり調べた限りでは、Capistrano 自体にはデプロイする対象を限定する機能は(たぶん)ないようなので、苦し紛れに上記のように書いてみたら出来ました。そんなレベルのエントリーです:(
これが正しい解かどうかは分かりませんが、イイ感じで動いてます。
デプロイする
デプロイする場合は Capifile があるディレクトリでおなじみのコマンドを実行すれば OK です。
$ cap deploy
あとは、 Apache 等の Web サーバを再起動するタスクを追加したり、 deploy する前に nanoc prune --yes
するようにしたり Capifile をいろいろ弄れば良いと思います。