1216 Stimmen

Übergabe von Kommandozeilenargumenten an einen Rake-Task

Ich habe eine Rake-Aufgabe, die einen Wert in mehrere Datenbanken einfügen muss.

Ich möchte diesen Wert an die Rake-Aufgabe von der Kommandozeile aus übergeben, oder von eine andere Rake-Aufgabe.

Wie kann ich das tun?

36voto

Nate Flink Punkte 3834

Ich konnte nicht herausfinden, wie man args und auch die :environment übergibt, bis ich dies herausgefunden habe:

namespace :db do
  desc 'Export product data'
  task :export, [:file_token, :file_path] => :environment do |t, args|
    args.with_defaults(:file_token => "products", :file_path => "./lib/data/")

       #do stuff [...]

  end
end

Und dann rufe ich so an:

rake db:export['foo, /tmp/']

32voto

fl00r Punkte 81243

Eigentlich hat @Nick Desjardins perfekt geantwortet. Aber nur für die Bildung: Sie können schmutzige Ansatz verwenden: mit ENV Argument

task :my_task do
  myvar = ENV['myvar']
  puts "myvar: #{myvar}"
end 

rake my_task myvar=10
#=> myvar: 10

29voto

kch Punkte 73753

Eine weitere häufig verwendete Option ist die Übergabe von Umgebungsvariablen. In Ihrem Code lesen Sie sie über ENV['VAR'] und können sie direkt vor dem rake Befehl, wie

$ VAR=foo rake mytask

25voto

Feng Punkte 2804
desc 'an updated version'
task :task_name, [:arg1, :arg2] => [:dependency1, :dependency2] do |t, args|
    puts args[:arg1]
end

24voto

jassa Punkte 19613

Ich wollte einfach nur laufen können:

$ rake some:task arg1 arg2

Einfach, nicht wahr? (Nö!)

Rake interpretiert arg1 y arg2 als Aufgaben und versucht, sie auszuführen. Also brechen wir einfach ab, bevor es passiert.

namespace :some do
  task task: :environment do
    arg1, arg2 = ARGV

    # your task...

    exit
  end
end

Nehmt das, Klammern!

Haftungsausschluss : Ich wollte dies im Rahmen eines ziemlich kleinen Haustierprojekts tun können. Nicht für die "reale Welt" gedacht, da man die Möglichkeit verliert, Rake-Aufgaben zu verketten (d.h. rake task1 task2 task3 ). Das ist es IMO nicht wert. Verwenden Sie einfach die hässliche rake task[arg1,arg2] .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X