Ruby on rails 在RubyonRails中,“;如果定义?产品「;不';无法在脚本/运行程序模式下工作?

Ruby on rails 在RubyonRails中,“;如果定义?产品「;不';无法在脚本/运行程序模式下工作?,ruby-on-rails,Ruby On Rails,如果有一个简单的脚本,为了区分它是单独运行还是在Rails应用程序环境中运行,我尝试使用 if defined? Product # something end if defined? RAILS_ENV 但即使产品已定义,并可在其他情况下使用,也无法识别。从那以后,我试着使用 if defined? Product # something end if defined? RAILS_ENV 相反,它工作得很好,但是想知道为什么要定义?产品不起作用?应该可以 if Product

如果有一个简单的脚本,为了区分它是单独运行还是在Rails应用程序环境中运行,我尝试使用

if defined? Product
  # something
end
if defined? RAILS_ENV
但即使产品已定义,并可在其他情况下使用,也无法识别。从那以后,我试着使用

if defined? Product
  # something
end
if defined? RAILS_ENV
相反,它工作得很好,但是想知道为什么要定义
?产品
不起作用?

应该可以

if Product
  # something
end
定义?ModelName为我的所有模型返回nil

Loading development environment (Rails 2.3.8)
>> defined? Post
=> nil
但是如果我这样做

>> Post; defined? Post
=> "constant"
可能是因为在你触摸它之前什么都没装。希望这有帮助

编辑:好吧,脚本/运行程序是脚本/控制台的一种非交互式形式,我认为它加载整个Rails应用程序并从该上下文运行。如果您需要确定调用是从script/runner发出的,我只能考虑将一个参数传递给function Model.long_running_方法(:runner=>true),并对此进行条件检查,或者如果这不够方便,请设置一个ENV常量ENV['something_runner']。并对其进行条件检查。

这应该可以

if Product
  # something
end
定义?ModelName为我的所有模型返回nil

Loading development environment (Rails 2.3.8)
>> defined? Post
=> nil
但是如果我这样做

>> Post; defined? Post
=> "constant"
可能是因为在你触摸它之前什么都没装。希望这有帮助


编辑:好吧,脚本/运行程序是脚本/控制台的一种非交互式形式,我认为它加载整个Rails应用程序并从该上下文运行。如果您需要确定调用是从script/runner发出的,我只能考虑将一个参数传递给function Model.long_running_方法(:runner=>true),并对此进行条件检查,或者如果这不够方便,请设置一个ENV常量ENV['something_runner']。然后对其进行状况检查。

其他部分似乎都正确。。。除非是产品。。。这不会破坏非运行代码吗?其他部分似乎都是正确的。。。除非是产品。。。这不会破坏非跑步者的规则吗?