2010-03-18 60 views

回答

32

它是如此簡單:

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

對於軌道4的使用(而不是$rails_rake_task):

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

這工作,但它的醜陋,因爲它依賴於內部耙定義一個全局變量 - 這可能會消失在未來 – Tilo 2014-02-18 21:51:35

+14

在Rails 4,上面並沒有爲我工作,但**如果File.basename($ 0)=='耙'**仍然沒有。 – codenoob 2014-03-02 04:07:09

3

它似乎運行rake將定義global variable $rakefile,但在我的情況下它被設置爲nil;所以你最好檢查$rakefile是否已被定義......看作__FILE__$FILENAME沒有被定義爲任何特殊的。

$ 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 
- 

不知道腳本/生成器,但。

6

$0保持當前的Ruby程序正在運行,所以這應該工作:

$0 =~ /rake$/ 
8

我更喜歡NickMervin的回答,因爲它不依賴於內部實施Rake(例如關於Rake的全局變量)。

這是更好 - 無正則表達式需要

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

File.split()是必要的,因爲可能會有人開始rake與它的完整路徑,如:

/usr/local/bin/rake taskname 
+1

考慮到一些最近的經驗試圖確定環境是否在耙內運行,測試$ 0是最可靠的。定義?(:: Rake)似乎永遠是真實的,至少在Rails中,所以這是行不通的。我查找了全局變量,但沒有找到合適的東西。 – 2014-03-31 13:26:27

0

您可以禁用插件使用環境變量:

$ DISABLE_BULLET= 1 rake some:task 

然後在你的公司德:

unless ENV['DISABLE_BULLET'] 
end 
相關問題