gpt4 book ai didi

ruby - 如何在 Ruby 中捕获 proc 的异常

转载 作者:行者123 更新时间:2023-12-04 03:39:53 24 4
gpt4 key购买 nike

我正在使用 cap-ext-parallelize gem用于并行执行 Capistrano 的 cap 任务
parallelize 方法创建 session ,这些 session 作为 proc 传递给我编写的包装器以捕获 session 内发生的任何异常

parallelize do |session|
session.run {deploy.restart}
session.run {queue.restart}
session.run {daemon.restart}
end
下面是包装代码
def parallel_execution(thread_session, function_name)
begin
thread_session
rescue StandardError => e
puts "[Error] #{function_name} failed with error #{e.message}"
raise e.class, "[Error] #{function_name} failed with error #{e.message}"
end
end
下面是包装器调用
parallelize do |session|
parallel_execution(session.run {deploy.restart}, "deploy.restart")
parallel_execution(session.run {queue.restart}, "queue.restart")
parallel_execution(session.run {daemon.restart}, "daemon.restart")
end
我想捕获单个 session 中发生的任何异常
即使 session 中存在异常,包装器也会继续
我试图打印值
session 作为数组传递给包装器,数组元素是 proc
所以基本上我需要一种方法来捕获 proc 块内的异常
我遇到了这个问题 ruby-proc-call-catching-exceptions但它没有提供在 proc 中捕获异常的方法

最佳答案

我在这里采取了不同的方法
包装方法

def parallel_execution(thread_session)
begin
eval thread_session
rescue StandardError => e
puts "[Error] #{function_name} failed with error #{e.message}"
raise "[Error] #{thread_session} failed with error #{e.message}"
end
结尾
包装器调用
parallelize do |session|
session.run { parallel_execution("deploy.restart") }
session.run { parallel_execution("queue.restart") }
session.run { parallel_execution("daemon.restart") }
end
我将 Rake 任务作为字符串传递给包装器并使用 eval 我调用了 rake 任务

关于ruby - 如何在 Ruby 中捕获 proc 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66243099/

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