我使用capistrano v2作为Rails3.2,在我的deploy.rb中有一个捆绑任务,如下所示;
# Bundler tasks
namespace :bundler do
desc "Create a symlink"
task :create_symlink, :roles => :app do
shared_dir = File.join(shared_path, 'bundle')
release_dir = File.join(release_path, '.bundle')
run("mkdir -p #{shared_dir} && ln -s #{shared_dir} #{release_dir}")
end
desc "Install required gems"
task :install, :roles => :app do
puts "New Release"
run "cd #{release_path} && #{bundle_path} install"
on_rollback do
if previous_release
puts "Rollback"
run "cd #{previous_release} && #{bundle_path} install"
else
logger.important "no previous release to rollback to, rollback of bundler:install skipped"
end
end
end
desc "Run bundler on new release"
task :bundle_new_release, :roles => :db do
bundler.create_symlink
bundler.install
end
end
after "deploy:update_code", "bundler:bundle_new_release"
after "deploy:rollback:revision", "bundler:install"当我运行cap deploy:rollback时,它不会运行on_rollback代码,它会尝试运行cd {release_path}。
我从http://kazjote.eu/2010/08/04/bundler-and-capistrano-the-right-way得到了这个例子。
发布于 2015-02-05 06:40:47
由于您没有提供任何日志,我不能确定deploy:rollback是否按其应有的方式部署了以前的版本,但是您将deploy:rollback (一个任务)与on_rollback (一个钩子)混淆了。
只有当task :install失败时才会调用on_rollback。然而,我也相信你需要为on_rollback钩子定义一个事务才能真正触发(并且可能必须在你的'run‘cd...’之前定义on_rollback )。
deploy:rollback应该使用之前成功的版本运行您的部署任务。
我在这里找到了一个更简单的例子:
http://pedz-bits.blogspot.com/2012/09/capistrano-errors-ensure-and-onrollback.html
namespace :fun do
desc "Sample showing rescue, ensure, and on_rollback inside a transaction"
task :stuff, :roles => :app do
transaction do
on_rollback { logger.debug "my rollback" }
begin
logger.debug "main"
# Either run or run_locally will work the same
# run_locally "false"
run "false"
rescue => e
logger.debug "rescue #{e.class}"
raise e
ensure
logger.debug "ensure"
end
end
end
end
Command output:
cap fun:stuff
* executingD `fun:stuff'
** transaction: start
* main
* executingB "false"
servers: ["condor.austin.ibm.com"]
[condor.austin.ibm.com] executingA command
command finished in 771ms
* rescue Capistrano::CommandError
* ensure
*** [fun:stuff] rolling back
* my rollback
failed: "bash -l -c 'false'" on condor.austin.ibm.com备注
active.
https://stackoverflow.com/questions/27936423
复制相似问题