У меня есть плагин, который немного тяжелый. (Bullet, настроенный с уведомлениями Growl.) Я бы не хотел включать его, если я просто запускаю задачу rake или генератор, поскольку это не полезно в этих ситуациях. Есть ли способ сказать, если это дело?
Как я могу определить, выполняется ли код Rails через rake или script/generate?
Ответ 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