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

Cra*_*hek 30 ruby-on-rails

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

小智 35

就这么简单:

if $rails_rake_task
  puts 'Guess what, I`m running from Rake'
else
  puts 'No; this is not a Rake task'
end
Run Code Online (Sandbox Code Playgroud)

Rails 4+

而不是$rails_rake_task,使用:

File.basename($0) == 'rake'
Run Code Online (Sandbox Code Playgroud)

  • 在Rails 4中,上面的内容对我来说不起作用,但**如果File.basename($ 0)=='rake'**仍然有效. (14认同)
  • 现在这不起作用了,因为通过 `rails` 运行 rake 任务是 SOP。 (2认同)
  • 为了更明确,实际上更喜欢使用 `$PROGRAM_NAME` 而不是 `$0`。 (2认同)

Til*_*ilo 9

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

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

  File.split($0).last == 'rake'
Run Code Online (Sandbox Code Playgroud)

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

  /usr/local/bin/rake taskname
Run Code Online (Sandbox Code Playgroud)


小智 6

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

$0 =~ /rake$/
Run Code Online (Sandbox Code Playgroud)