如何通过rake或script / generate运行Rails代码?

我有一个有点重量的插件。 (Bullet,配置了Growl通知。)如果我只是运行rake任务或生成器,我想不启用它,因为它在这些情况下没用。 有没有办法判断是否是这种情况?

就这么简单:

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

Rails 4+

而不是$rails_rake_task ,使用:

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

我更喜欢NickMervin的答案,因为它不依赖于Rake的内部实现(例如,在Rake的全局变量上)。

这甚至更好 – 不需要正则表达式

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

需要File.split(),因为有人可以用它的完整路径开始rake ,例如:

  /usr/local/bin/rake taskname 

$0保持当前正在运行的ruby程序,所以这应该工作:

 $0 =~ /rake$/ 

似乎运行rake将定义一个全局变量$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 - 

但是不确定脚本/生成器。

您可以使用环境变量禁用插件:

 $ DISABLE_BULLET= 1 rake some:task 

然后在你的代码中:

 unless ENV['DISABLE_BULLET'] end