この度、初めてcapistranoを使ってみようと思ったら、ちょうど3.0.0が出たばっかりのタイミングだったらしく、ググって出てくる情報が微妙に役に立たなかった。
2.x系は使ってないのでわからないが、2から3へのアップグレードについては http://www.capistranorb.com/documentation/upgrading/ とか見ればいいと思う。
インストールは普通に、gem installするか、Gemfileに書いてbundleする。
プロジェクトの初期化的なことをする。
$ cap installbundlerでインストールした場合は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'をCapfileに書くか、rbenvのパスによってはrbenv_custom_path使え、と書いてあって、僕が使ってるUbuntuでは実際rbenvのパスがcapistrano-rbenvのデフォルトと違ったので、
set :rbenv_type, :user # or :system, depends on your rbenv setup
set :rbenv_ruby, '2.0.0-p247'
set :rbenv_custom_path, '/opt/rbenv'を、rbenv_typeの代わりに書いてやった。
これでようやく、デプロイしてbundle installされるようになった。
0 件のコメント:
コメントを投稿