Capistranoでオリジナルのタスクを書いていて、ふとrails_envはどこで設定されているのか気になったので調べたメモ。
直接的にはcapistrano/railsのset_rails_env.rakeで設定されている。
Capistrano::DSL.stages.each do |stage|
after stage, 'deploy:set_rails_env'
end
after stage
と書かれているので、productionやstagingがタスクになっているのだけど、そのタスクはどこで設定されているのだろうという疑問も湧いてきたので更に調べる。
stageのタスクについて
各stageのタスクはcapistranoのsetup.rbで設定されている。
stages.each do |stage|
Rake::Task.define_task(stage) do
set(:stage, stage.to_sym)
...
end
end
そしてstageのタスクはbundle exec cap production deploy
などでcapに渡された最初のタスクとして実行される。
capではRake::Application
のサブクラスであるCapistrano::Aplicationをrunしているため、cap以降の引数はそれぞれRakeタスクとして実行される。