如何通过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