我正在尝试创建一个自定义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]
?
此外,我发现了一些其他奇妙的链接,这些链接的执行方式略有不同。这是链接。
在具有此示例的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
而失败。我只是想做这项工作,所以我可以继续前进。有没有人有任何想法?
答案 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