【问题标题】:Exit from one of a series of Rake tasks and continue with the next从一系列 Rake 任务中的一个退出并继续下一个
【发布时间】:2023-03-16 08:44:01
【问题描述】:

我有这个主要的 Rake 任务

  namespace :crawler do

  task main: :environment do
  Rake::Task['tester:first'].execute
  Rake::Task['tester:second'].execute
  Rake::Task['tester:third'].execute
  end

  end

每个任务都会运行一段代码来检查是否存在值,如果不存在则退出任务并继续下一个任务。 实际上代码如下,但它不起作用

def check(value)
 if !value.nil?
   return value
 else
   exit
 end
end

当我到达 Exit 部分时,整个程序退出,其他任务不执行。

【问题讨论】:

  • Exit 将终止整个脚本,而不仅仅是任务。你不能把它拿出来吗?
  • 你写了“检查一个值是否存在,如果它不存在则退出任务”但是在你的“检查”方法中,如果值存在(不是零),你正在运行“退出”
  • 有什么原因,你为什么不使用像task main: :environment => ['tester:first', 'tester:second','tester:third']这样的先决条件?
  • @knut 不是真的,这将如何适用于我的问题?

标签: ruby-on-rails ruby rake rake-task


【解决方案1】:

如果您的检查方法返回 nil,请尝试在您的 Rake 任务中使用“下一个”来跳转到下一个任务。

您可以在“检查”函数中使用条件来返回值(如果存在),或者如果值为 nil,则返回 nil。然后,如果 check 返回 nil,您可以使用 next(不是 exit)跳到下一个任务。

task :main do
  Rake::Task['first'].execute(value: 'Hello, Rake world!')
  Rake::Task['second'].execute
end

task :first do |_t, args|
  value = args[:value]
  next if check(value).nil?
  puts 'the value is: ' + value
end

task :second do
  puts 'the second task'
end

def check(value)
  if value.nil?
    return nil
  else
    return value
  end
end

在函数定义中使用“next”将不起作用。您只能从当前 rake 任务中跳到下一个 rake 任务

【讨论】:

  • 谢谢,我已经应用了您的解决方案,效果很好!我会往这边走!
  • 在 check 方法中编写 if/else/end 的另一种方法是使用三元:“return value.nil? ? nil : value”
猜你喜欢
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 2017-09-16
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多