我不明白如何为rake任务添加参数。 (摘自文档)

时间:2016-04-01 18:34:45

标签: ruby-on-rails ruby rake

我正在尝试创建一个自定义rake任务,它接受两个参数并在我的代码中使用它们。

我正在查看rails文档,我看到这个用于运行带有参数的rails任务的摘录:

task :task_name, [:arg_1] => [:pre_1, :pre_2] do |t, args|
  # You can use args from here
end

然后可以像这样调用rake任务:

bin/rake "task_name[value 1]"

然而,这对我来说太模糊了。 rails文档未能给出带参数的rake任务的具体示例。

例如,我正在查看此代码,我在想bin/rake "task_name[value 1]"做什么?什么是[:pre1, :pre2]

此外,我发现了一些其他奇妙的链接,这些链接的执行方式略有不同。这是链接。

Thoughtbot version

在具有此示例的thinkbot版本中

 task :send, [:username] => [:environment] do |t, args|
   Tweet.send(args[:username])
 end

什么是[:username => [:environment]?它与官方的rails docs不同。

这是另一个: 4 ways to write rake tasks with arguments

我还查看了官方的optparser文档,它也有不同的方法使它工作。

我想要的只是这个示例代码,我必须处理我的.rake文件:

require 'optparse' 
task :add do 
  options = {}
  OptionParser.new do |opts| 
    opts.banner = "Usage: rake add" 
    opts.on("-o", "--one ARGV", Integer) { |one| options[:one] = one } 
    opts.on("-t", "--two ARGV", Integer) { |two| options[:two] = two } 
  end.parse! 
  puts options[:one].to_i + options[:two].to_i
end 

代码因invalid option: -o而失败。我只是想做这项工作,所以我可以继续前进。有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

这是我的一个带有参数的rake任务:

namespace :admin do
  task :create_user, [:user_email, :user_password, :is_superadmin] => :environment do |t, args|
    email = args[:email]
    password = args[:password]
    is_superadmin = args[:is_superadmin]
    ... lots of fun code ...
  end
end

我像这样调用这个任务:

rake admin:create_user['admin@example.com','password',true]

修改

要传递标记,您可以执行以下操作:

task :test_task do |t, args|
  options = {a: nil, b: nil}
  OptionParser.new do |opts|
    opts.banner = "Usage: admin:test_task [options]"
      opts.on("--a", "-A", "Adds a") do |a|
        options[:a] = true
      end   
      opts.on("--b", "-B", "Adds b") do |b|
        options[:b] = true
      end   
    end.parse!

  puts options.inspect
end

调用它的例子:

rake admin:test_task -A -B
rake admin:test_task -A
rake admin:test_task -B