如何在Rails 3中检测我的代码是否在控制台中运行?

Mar*_*kus 40 console ruby-on-rails ruby-on-rails-3

我在初始化程序中有这个代码:

if $0 == 'irb'
  # ...
end
Run Code Online (Sandbox Code Playgroud)

它适用于Rails 2.3,但在Rails 3中,$ 0的值是'script/rails',无论它是用rails c还是rails s启动的.ARGV是一个空数组.如何检测应用程序是否已使用"rails c"或"rails console"启动?

Adi*_*ghi 82

你也许可以试试这个

if defined?(Rails::Console)
  # in Rails Console
else
  # Not in Rails Console
end
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在运行Spring时,在Rails初始化期间这不起作用. (9认同)
  • @wxgeorge @Andreas`define?`是一个特殊的方法,会让你传递你想要的任何名字,例如``定义?(Hwddddw :: Ewedw)#=> nil` (4认同)
  • 你想要`Rails.const_defined?("Console")`,而不是'定义?(Rails :: Console)`. (2认同)

elo*_*esp 6

许多年后,有一种更好的方法来执行此注册块以在控制台上运行(使用railtie接口)。

所以在初始化器中你可以写:

Rails.application.console do
  # your code here
end
Run Code Online (Sandbox Code Playgroud)

好的考虑是它也适用于runner并且它也应该适用于 spring(但我没有测试过)。