2017-07-11 [長年日記]
_ capistrano3でrollback時にソースを消さなくする対応
server_starterを利用して新旧unicornプロセスを継ぎ目なく切り替えているのだが、cap deploy:rollback時にうまく動作しないことがあることが分かった。rollback時にcapistranoが対象のソースを消してしまうので、旧unicornプロセスは存在するのだけどソースがない、という状態になって、白い画面になったりCSSなどassetsが取れなかったり。
そこでrollback時にはソースを削除しないようにしようと思ったのだけど、capistrano3でそのやり方が分からない。rakeタスクで登録するスタイルなので、Rubyのソースコードで上書きもできない。うーん、と思ってオプションで削除ON/OFFできる機能のPRを送ったけど、複雑性が増すからいれたくなさそうな空気。その代わりにタスクの削除の仕方を教えてくれた。あー、タスクの削除できたのか!
namespace :deploy do
Rake::Task[:cleanup_rollback].clear_actions
# capistrano内部で定義されてるrollback後のソース削除タスクをクリア
end
消す対象のタスクはこの辺 https://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/deploy.rake#L170
参考ページ http://capistranorb.com/documentation/advanced-features/overriding-capistrano-tasks/