2010-03-18 8 views

Antwort

32

Es ist so einfach ist:

if $rails_rake_task 
    puts 'Guess what, I`m running from Rake' 
else 
    puts 'No; this is not a Rake task' 
end 

Für Rails 4 verwenden (anstelle von $rails_rake_task):

File.basename($0) == 'rake' 
+0

Dies funktioniert, aber es ist hässlich, weil es intern, das eine globale Variable auf Rake hängt - die 4 in der Zukunft – Tilo

+14

In Rails weggehen könnte, haben die oben nicht für mich arbeiten, aber ** wenn File.basename ($ 0) == 'rake' ** immer noch tat. – codenoob

3

Es scheint, dass rake eine global variable $rakefile zu definieren, aber in meinem Fall wird es auf nil gesetzt; also ist es besser, nur zu überprüfen, ob $rakefile definiert wurde ... sehen als __FILE__ und $FILENAME nicht zu etwas Besonderem definiert werden.

$ cat test.rb 
puts(global_variables.include? "$rakefile") 
puts __FILE__ 
puts $FILENAME 
$ cat Rakefile 
task :default do 
    load 'test.rb' 
end 
$ ruby test.rb 
false 
test.rb 
- 
$ rake 
(in /tmp) 
true 
./test.rb 
- 

Nicht sicher über Skript/Generator, obwohl.

6

$0 hält den aktuellen rubin Programmlauf sein, so sollte diese Arbeit:

$0 =~ /rake$/ 
8

Ich mag NickMervins Antwort besser, weil es nicht auf das interne abhängt Implementierung von Rake (z.B. auf der globalen Variable von Rake).

Dies ist noch besser - kein regexp

File.split($0).last == 'rake' 

File.split benötigt() benötigt wird, weil jemand rake mit seinen vollständigen Pfad beginnen könnte, zum Beispiel:

/usr/local/bin/rake taskname 
+1

Angesichts einiger Erfahrungen in jüngster Zeit, bei denen versucht wurde festzustellen, ob die Umgebung innerhalb von Rake läuft, ist das Testen von $ 0 am zuverlässigsten. definiert? (:: Rake) schien immer wahr zu sein, zumindest in Rails, also hat das nicht funktioniert. Ich habe nach globalen Variablen gesucht, aber nichts passendes gefunden. –

0

Sie können die deaktivieren Plugin mit Umgebungsvariablen:

$ DISABLE_BULLET= 1 rake some:task 

Und dann in Ihrem co de:

unless ENV['DISABLE_BULLET'] 
end 
Verwandte Themen