There's an echo in my head

日々のメモ。

capistrano

capistrano-pending v0.2.0をリリースした

https://rubygems.org/gems/capistrano-pending/versions/0.2.0 Capistranoのプラグイン方式がv3.7から大きく変わって:scm変数が非推奨になり、さらにv4.0からは消されるらしく、その対応のため。といってもいただいたPRの挙動を確認しただけだけど。 github…

capistrano-rubotyというgemを書いた

capistranoでrubotyをデプロイするのをよしなに助けてくれるgemを書いた。 github.com デーモン化とPIDファイルの書き出しに対応したruboty v1.3.0が必要になるので要注意。

Capistranoで今処理しようとしているhostの属するroleを判定する

host.rolesを叩くと、role(のSymbol)のSetが返ってくる。 task :foo do on release_roles :all do |host| host.roles #=> #<Set: {:web, :app, :db}> end end git_strategyの中でもcontextを通して同じことができる。 set :git_strategy, MyGitStrategy module MyGitStrategy def r</set:>…

Capistrano3のタスクの中からエラーを投げる

capistrano-pending gemでREVISIONファイルが無いときにエラーで終わらせたくてCapistranoのコードを読んでみたら、次のようにしてた: if test "[ -f #{current_path}/REVISION ]" # ファイルが存在した場合の処理 else error "REVISION file doesn't exist"…

capistrano-bundlerでデプロイしたときにbinstubがどうこうという警告が出る件の対応

bundlerでbinstubしたrailsコマンドやrakeコマンドを使っていると、次のような警告がbin/rails cしたときなどに表示される: Looks like your app's ./bin/rails is a stub that was generated by Bundler. In Rails 4, your app's bin/ directory contains …

capistrano-pendingというgemを作った

http://rubygems.org/gems/capistrano-pending Capistrano 2で使えていたdeploy:pendingというコミットの差分ログを表示するレシピが3になってから使えなくなっていたので、同じ動作をするものを作った。 Capistranoは3.2.0以上が必要。このバージョンからre…

capistrano-ec2_taggedというgemのv0.1.0をリリースした

以前Capistranoでデプロイ対象のEC2インスタンスをタグで指定するものを書いているという記事で紹介した、capistrano-ec2_taggedというgemをリリースした。 capistrano-ec2_tagged (0.1.0): http://t.co/Bn9FSwBrgb Get ip addresses of AWS EC2 instances f…

Capistranoでデプロイ対象のEC2インスタンスをタグで指定するものを書いている

capistrano-ec2_taggedというgemを作った。まだrubygems.orgには上げていない。 これはCapistranoで指定タグのEC2インスタンスにデプロイのようなことをやるためのもので、次のようにして使う: # Gemfile gem "capistrano-ec2_tagged", require: false, gith…

delayed_job + Rails4 + Capistrano + rbenv

Rails 4(ActiveRecord)でdelayed_jobを使いつつ、それをCapistranoでデプロイする方法のメモ。基本的に本家のWikiに従う。 キューの機能を使う まず必要なgemをインストールしてマイグレーションファイルと実行ファイルを作成する。 # Gemfile gem "delaye…

Capistrano2でsharedにシンボリックリンクするディレクトリを追加する

Capistranoではリリース間でファイルを共有するためにいくつかのディレクトリがshared/以下にコピーされ、そちらにシンボリックリンクをはるようになっている。たとえばpublic/assetsとかlogとか。 この仕組は任意のディレクトリに対しても使うことができる…

Capistranoでunicornを扱うときはBUNDLE_GEMFILEをリセットする

Capistranoでunicornを使ったアプリをデプロイしているとBundler::GemfileNotFoundという例外があがることがあるらしい*1 どうやらBUNDLE_GEMFILEがreleasesのある時点でのGemfileのパスを保持したままデプロイを重ねて、そのファイルがtruncateで削除されて…

capistranoでassetsに更新がない場合にprecompileを行わない

サーバ間に差異があると意図どおりに動かない可能性があるのでおすすめできない(追記2参照) capistranoのでデプロイをするとdeploy:assets:precompileを走らせてassetsのコンパイルをしてくれるけど、毎回assetsに変更があるわけではない。なので変更がな…

capistrano_database_ymlでデプロイ時にdatabase.ymlを生成する

capistrano_database_ymlを使うと、デプロイ時にテンプレートからdatabase.ymlを生成することができる。このときcapistrano側からパラメータを与えられるので、multistageと組み合わせると「本番サーバとステージングサーバで同じproduction環境を使いながら…

capistrano-rbenvを使ってみてのメモ

capistrano-rbenvを使うとcapistranoでrbenvを扱うことができる。3系には今のところ対応していない(capistranoの3系ってどこに出てるんだろう?)。 Vagrant/Ched-soloで環境を作っていて2点ほどメモ。 multistage環境でcapistrano-rbenvを使うときにrbenv_…

capistranoでゴニョゴニョしたのでメモ

capistranoのレシピ 同じnamespace内のタスクなら、タスク名を書けばそれがそのまま呼べるtask :foo do; bar; end 別のnamespaceなら<namespace>.<task>という感じで、ドットで繋げればOK http://stackoverflow.com/questions/7021523/how-can-i-trigger-a-capistrano-task-fr</task></namespace>…

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。