gpt4 book ai didi

ruby-on-rails - 如何在自定义 capistrano 任务中使用事务?

转载 作者:行者123 更新时间:2023-12-01 09:37:56 25 4
gpt4 key购买 nike

我正在编写一个自定义 capistrano 任务来缩小我的 javascript,并希望通过回滚部署来处理缩小失败的情况。

我已经阅读了文档,并认为我已经弄清楚了如何做到这一点,但它对我不起作用。

这是我所拥有的:

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 钩子(Hook)没有运行。它似乎知道任务失败,因为它在最后输出 failed - 即使我没有引发异常。

关于为什么我的 on_rollback 没有运行的任何想法?

最佳答案

example

task :deploy do
transaction do
update_code
symlink
end
end

task :update_code do
on_rollback { run "rm -rf #{release_path}" }
source.checkout(release_path)
end
...

我想知道 on_rollback 调用是否不应该进入事务 block 内部,比如

  transaction do
on_rollback do
run "rm #{current_path}/public/javascripts/all.js"
puts "ROLLBACK"
end
run "cd #{current_path}; RAILS_ROOT=#{current_path} rake bundle:js"
end

关于ruby-on-rails - 如何在自定义 capistrano 任务中使用事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4426079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com