2010-03-18 59 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 
相关问题