Я пишу пользовательскую задачу capistrano, чтобы минимизировать мои javascripts и хочу обработать случай, когда минимизация завершилась неудачей, отбросив развертывание.Как использовать транзакции в рамках собственных задач capistrano?
Я прошел через документацию и подумал, что я понял, как это сделать, но это не работает для меня.
Вот что у меня есть:
desc 'Minify all javascript files'
task :bundle, :roles => :app, :except => { :no_release => true } do
on_rollback do
run "rm #{current_path}/public/javascripts/all.js"
puts "ROLLBACK"
end
transaction do
run "cd #{current_path}; RAILS_ROOT=#{current_path} rake bundle:js"
end
end
after 'deploy:update', 'deploy:bundle'
Когда я бегу cap staging deploy:bundle
и установить его на неудачу, я получаю следующий результат:
triggering start callbacks for `staging'
* executing `staging'
triggering start callbacks for `deploy:bundle'
* executing `multistage:ensure'
* executing `deploy:bundle'
** transaction: start
* executing "cd /path/to/app/current; RAILS_ROOT=/path/to/app/current rake bundle:js"
servers: ["example.com"]
[example.com] executing command
*** [err :: example.com] rake aborted!
*** [err :: example.com] invalid byte sequence in US-ASCII
# Trace here - removed for brevity
command finished
failed: "sh -c 'cd /path/to/app/current; RAILS_ROOT=/path/to/app/current rake bundle:js'" on example.com
Так является в сделке, но мой on_rollback
крючок не запускается. Кажется, он знает, что задача не удалась, поскольку она выводит failed
в конце - даже если я не создал исключение.
Любые идеи относительно того, почему мой on_rollback
не работает?
on_rollback не будет работать за пределами сделки – Rob
Это еще случай для Capistrano 3? –