ページ

2013年10月14日月曜日

capistranoでbundle installするまで

今回はいつにも増して個人の覚え書きです。

この度、初めてcapistranoを使ってみようと思ったら、ちょうど3.0.0が出たばっかりのタイミングだったらしく、ググって出てくる情報が微妙に役に立たなかった。
2.x系は使ってないのでわからないが、2から3へのアップグレードについては http://www.capistranorb.com/documentation/upgrading/ とか見ればいいと思う。

インストールは普通に、gem installするか、Gemfileに書いてbundleする。

プロジェクトの初期化的なことをする。
$ cap install
bundlerでインストールした場合はbundle execをちゃんと付ける。(後で出て来るcapistrano-rbenvを使おうとした時に、この辺の話でしばらくハマった)

cap installすると、Capfileやら何やら色々生成される。

deploy.rbやらproduction.rbやらに目を通すと、よくわからないDSLが書いてあるので、ちょっと読んで嫌な気持ちになる。

role :appとか3つぐらい書いてあるところがあるが、僕の場合サーバーは1個しかないので server で代用できる。

あとはdeploy.rbの:application、:repo_url、:deploy_toぐらいを書けばたぶん最低限のデプロイはできる。(set :scm :gitは書かなくても動いた)

$ cap
だけだと、Stageがセットされてないって文句を言われるので、
$ cap production deploy
とか、してやる。


bundle installもして欲しいので、続いてcapistrano-bundlerを使う。
gem installもしくはGemfileに書いてbundle。

Capfileで
require 'capistrano/bundler'
すれば、deploy:updatedの前にbundle installしてくれるはず。

が、エラー。
/usr/bin/env: bundle: No such file or directory

原因は、サーバーでrbenvを使っていて、capistranoはsudoでコマンドを実行するため、sudo /usr/bin/env だとrbenvのgemとパスが違ってしまうこと。
サーバーのbashrcとか/etc/sudoersとかを書き換えたり、Capfileでset :use_sudo, falseとかしても駄目だった。

そこで、capistrano-rbenvというものがあるのでそいつを使う。
rubygems.orgにホストされているのは古いので、ソースにgithubを指定してやる必要がある。
(僕の場合、前二つをgem installして、ここでGemfileに書くようにしたため、bundle execつけずに実行してワケが分からなくなった)

Usageを見ると
require 'capistrano/rbenv'

set :rbenv_type, :user # or :system, depends on your rbenv setup
set :rbenv_ruby, '2.0.0-p247'
をCapfileに書くか、rbenvのパスによってはrbenv_custom_path使え、と書いてあって、僕が使ってるUbuntuでは実際rbenvのパスがcapistrano-rbenvのデフォルトと違ったので、
set :rbenv_custom_path, '/opt/rbenv'
を、rbenv_typeの代わりに書いてやった。

これでようやく、デプロイしてbundle installされるようになった。

0 件のコメント:

コメントを投稿