如何从 rake 任务返回一些值

问题描述 投票:0回答:5

如何从 ruby 中的

Rake
任务返回一些值。

示例代码:

namespace tasks
    task task1: :environment do |task|
      log = "Running task"
      puts log
      log << "Done"
      return log # suggest how to do this
    end
end

我正在运行 rake 任务:

Rake::Task['tasks:task1'].invoke
。如何获取变量中的返回值,如下所示:

result = Rake::Task['tasks:task1'].invoke
ruby-on-rails ruby rake-task
5个回答
1
投票

假设您希望该任务结果出现在其他任务中:


config = ''

task :load_config do
  config = 'some config' # this could be reading from a file or API
end

# this tasks depends on the other
task use_config: [:load_config] do
  puts config
end

然后:

$ bundle exec rake use_config
some config

0
投票

尝试中止并显示错误消息并捕获该消息。

根据您尝试返回的内容,您可以尝试使用错误消息中止任务,该错误消息可以从您调用任务的位置“捕获”。然后您就可以看到错误消息是什么。

您的任务

namespace :tasks
  task task1: :environment do |task|
    log = "Running task... "
    puts log
    log << "Done!"
    abort( log )
  end
end

运行您的任务

begin
  Rake::Task[ "tasks:task1" ].invoke
rescue SystemExit => exit
  puts exit.message #=> "Running task... Done!" 
end

它并不完全优雅,但根据您想要返回的内容,它可以满足您的需求。


0
投票

直接致电 Rake 的
action

使用@vigo的例子,因为它很简单。

task :return_a_value do
  '123'
end
result = Rake::Task['return_a_value'].actions.first.call

puts result #=> "123"

我通过在控制台中挖掘 Rake 任务的各种方法发现了这一点,这似乎不需要运行任务两次就可以工作,就像@vido 的答案一样。

但是,我发现的唯一警告是我无法弄清楚如何使用此方法将参数传递给 Rake 任务。使用

.call( "myargument" )
不起作用。如果您能弄清楚如何做到这一点,如果您分享它,我将不胜感激。谢谢!

更新:弄清楚了。

经过更多的实验,我弄清楚了如何在向 Rake 任务传递参数时使用此方法。您只需传递参数中的

Hash
作为第二个参数,并将
nil
作为第一个参数,如下所示:

task :return_a_value, :mystring do
  mystring
end
result = Rake::Task['return_a_value'].actions.first.call( nil, { mystring: "hellow there" } )

puts result #=> "hellow there"

它还有一个额外的好处,就是可以对传递给 Rake 任务的参数进行命名,这是一个很好的好处。


版本

  • 导轨:7.0.7
  • 红宝石:3.2.2

-1
投票

您可以使用代码退出 rake 任务,然后使用 $ 进行检查?

但也许 rake 可能并不是真正适合这项工作的工具。


-1
投票
task :return_a_value do
  '123'
end

task :hello do
  result = Rake::Task['return_a_value'].invoke.first.call
  puts result
end

现在致电:

$ rake hello
123
© www.soinside.com 2019 - 2024. All rights reserved.