Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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'

Ответ 2

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

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

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

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

  /usr/local/bin/rake taskname

Ответ 3

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

$0 =~ /rake$/

Ответ 4

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

Не уверен насчет script/generator.

Ответ 5

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

$ DISABLE_BULLET= 1 rake some:task

И затем в вашем коде:

unless ENV['DISABLE_BULLET']
end