Как передать аргументы командной строки в задачу rake

, даже я тоже столкнулся с той же проблемой, позже я обнаружил, что есть проблема с кодировкой. i предлагаю вам также изменить редактор ur. лучшие дружественные к python IDE или редакторы - это pycharm, sublime, vim для linux.

1035
задан the Tin Man 22 August 2016 в 17:46
поделиться

3 ответа

Другой часто используемый параметр - это передать переменные среды. В своем коде вы читаете их через ENV ['VAR'] и можете передать их прямо перед командой rake , например

$ VAR=foo rake mytask
29
ответ дан 19 December 2019 в 20:19
поделиться

Вы можете указать формальные аргументы в rake, добавив символьные аргументы к вызову задачи. Например:

require 'rake'

task :my_task, [:arg1, :arg2] do |t, args|
  puts "Args were: #{args}"
end

task :invoke_my_task do
  Rake.application.invoke_task("my_task[1, 2]")
end

# or if you prefer this syntax...
task :invoke_my_task_2 do
  Rake::Task[:my_task].invoke(3, 4)
end

# a task with prerequisites passes its 
# arguments to it prerequisites
task :with_prerequisite, [:arg1, :arg2] => :my_task #<- name of prerequisite task

# to specify default values, 
# we take advantage of args being a Rake::TaskArguments object
task :with_defaults, :arg1, :arg2 do |t, args|
  args.with_defaults(:arg1 => :default_1, :arg2 => :default_2)
  puts "Args with defaults were: #{args}"
end

Затем из командной строки:

> rake my_task[1,2]
Args were: {:arg1=>"1", :arg2=>"2"}

> rake "my_task[1, 2]"
Args were: {:arg1=>"1", :arg2=>"2"}

> rake invoke_my_task
Args were: {:arg1=>"1", :arg2=>"2"}

> rake invoke_my_task_2
Args were: {:arg1=>3, :arg2=>4}

> rake with_prerequisite[5,6]
Args were: {:arg1=>"5", :arg2=>"6"}

> rake with_defaults
Args with defaults were: {:arg1=>:default_1, :arg2=>:default_2}

> rake with_defaults['x','y']
Args with defaults were: {:arg1=>"x", :arg2=>"y"}

Как показано во втором примере, если вы хотите использовать пробелы, кавычки вокруг целевого имени необходимы, чтобы оболочка не разделяла аргументы в пространстве. .

Глядя на код в rake.rb , выясняется, что rake не анализирует строки задач для извлечения аргументов для предварительных условий, поэтому вы не можете выполнить задачу : t1 => "dep [1,2] ". Единственный способ указать различные аргументы для предварительного условия - это явно вызвать его в зависимом действии задачи, как в : invoke_my_task и : invoke_my_task_2 .

Обратите внимание, что некоторые оболочки ( как и zsh) потребует от вас выйти за скобки: rake my_task \ ['arg1' \]

1122
ответ дан 19 December 2019 в 20:19
поделиться

Я нашел ответ на этих двух сайтах: Net Maniac и Aimred .

Чтобы использовать эту технику, вам необходимо иметь rake версии> 0.8

Обычное описание задачи rake следующее:

desc 'Task Description'
task :task_name => [:depends_on_taskA, :depends_on_taskB] do
  #interesting things
end

Чтобы передать аргументы, выполните три действия:

  1. Добавьте имена аргументов после имени задачи, разделенные запятыми.
  2. Поместите зависимости в конце, используя: need => [...]
  3. Place | t, args | после делать. (t - объект для этой задачи)

Для доступа к аргументам в скрипте используйте args.arg_name

desc 'Takes arguments task'
task :task_name, :display_value, :display_times, :needs => [:depends_on_taskA, :depends_on_taskB] do |t, args|
  args.display_times.to_i.times do
    puts args.display_value
  end
end

Чтобы вызвать эту задачу из командной строки, передайте ей аргументы в [] s

rake task_name['Hello',4]

выведут

Hello
Hello
Hello
Hello

, и если вы хотите вызвать эту задачу из другой задачи и передать ей аргументы, используйте invoke

task :caller do
  puts 'In Caller'
  Rake::Task[:task_name].invoke('hi',2)
end

, тогда команда

rake caller

выведет

In Caller
hi
hi

Я не нашел способа передать аргументы как часть зависимости, так как следующий код ломается:

task :caller => :task_name['hi',2]' do
   puts 'In Caller'
end
58
ответ дан 19 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: