Capistrano はとっても便利で、Railsを使ったら間違いなく反映はこれ!
ってぐらいよく出来てるツールなんですがコイツをNanocなプロジェクトで使う編です。
Nanoc はRubyで出来てる静的ページのCMSなんですが、
- HTMLをHamlで書きたい
- CSSをSassで書きたい
- Compassを使いたい
- JSをCoffeeScriptで書きたい
なんかの時にはとてもとても重宝しているツールです。
ちょっとこんなJS試したいなーの時とか簡単なサイト作るのに使ってます。
だって、HTMLとか書くの面倒じゃないですか!
開発時にはHamlとかでゴリゴリ書いていくんですが、
コイツをサーバーに乗せる時にはHTMLにしなきゃなりません。
そのため、一度「コンパイル」することが必要です。
ちなみにNanoc自体にもDeploy機能はありますが、ちょっと手の込んだことをしたいケース等を想定しています。単純なrsyncだけならNanocだけで十分ですね。
Capfileの修正
Non-RailsなプロジェクトにCapistranoを利用すると、finalize_update
あたりでコケます。
No such file or directory
public/imagesなんてねーよ!と怒られる。そりゃそうです。
もともとCapistranoはRailsを想定していますからね。
そもそも、Non-Railsであるプロジェクトであれば不要なタスクが多いので、そいつらは始めに殺してしまう感じです。
migrate
、finalize_update
、start
、stop
、restart
なんかは要らないですね。
# config/deploy.rb
namespace :deploy do
task :migrate do
puts " not doing migrate because not a Rails application."
end
task :finalize_update do
puts " not doing finalize_update because not a Rails application."
end
task :start do
puts " not doing start because not a Rails application."
end
task :stop do
puts " not doing stop because not a Rails application."
end
task :restart do
puts " not doing restart because not a Rails application."
end
end
Nanocを自動でコンパイルさせる
Capistranoのソースをgitリポジトリにしているなんかだと、
当然コンパイルされないままプロジェクトが一式送信されてしまうので
私の場合はリモートでコンパイルするようにしてます。
Bundlerを利用していますので、
# Capfile
require 'bundler/capistrano'
をCapfileに追記した後、タスクを
# config/deploy.rb
namespace :deploy do
# code
after "deploy:update_code", "compile_nanoc"
end
task :compile_nanoc do
puts " Compiling nanoc..."
run "cd #{release_path} && bundle exec nanoc compile"
end
こんな感じで書いてやるとリモートサーバーで bundle install
が行われた後、
コンパイルが掛かります。失敗するともちろんデプロイは中断、 rollback
してくれますよ。