Как я могу узнать, выполняется ли код Rails через rake или script / generate? - PullRequest
30 голосов
/ 18 марта 2010

У меня есть плагин, который немного тяжелый. (Пуля, настроенная с помощью уведомлений Growl.) Я бы не хотел ее включать, если я просто запускаю задачу rake или генератор, поскольку в таких ситуациях это бесполезно. Есть ли способ узнать, так ли это?

Ответы [ 5 ]

35 голосов
/ 02 апреля 2013

Это так просто:

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'
9 голосов
/ 19 февраля 2014

Мне больше нравится ответ НикаМервина, потому что он не зависит от внутренней реализации Rake (например, от глобальной переменной Rake).

Это даже лучше - регулярное выражение не требуется

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

File.split () необходим, потому что кто-то может запустить rake с его полным путем, например ::100100

  /usr/local/bin/rake taskname
6 голосов
/ 13 января 2013

$0 содержит текущую запущенную программу ruby, поэтому это должно работать:

$0 =~ /rake$/
3 голосов
/ 18 марта 2010

Похоже, что при запуске 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
-

Не уверен насчет скрипта / генератора, хотя.

1 голос
/ 25 февраля 2015

Вы можете отключить плагин, используя переменную окружения:

$ DISABLE_BULLET= 1 rake some:task

А потом в вашем коде:

unless ENV['DISABLE_BULLET']
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...