LoginSignup
4
4

More than 5 years have passed since last update.

nanoc で作った静的サイトを Capistrano でデプロイする

Posted at

やりたかったこと

  • nanoc で静的サイトを作成
  • Capistrano で output ディレクトリの内容のみ :deploy_via, :copy でデプロイ

やり方

前提

  • 既に何らかの nanoc プロジェクトが手元にある
  • Mac OSX 10.8/Ruby 2.0.0-p247 で確認(その他の環境では未確認)

Capistrano のインストール

Gemfile に下記を記述して、 bundle install します。

Gemfile
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 を作成して以下のように記述しました。

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 をいろいろ弄れば良いと思います。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4