如何在生产模式下抑制erb中的调试消息

时间:2009-09-04 01:12:43

标签: ruby-on-rails ruby debugging erb

我想在开发模式下调用erb模板中的一些调试消息,但是在生产模式下调用它时(即。)

<%= debug variable_name %>

但是,这将以任何模式打印。

我发现我可以做到

<% if logger.debug?
     debug variable_name
   end %>

似乎有用。这是正确的方法,还是有更优雅的解决方案?

3 个答案:

答案 0 :(得分:3)

你可能想做这样的事情:

<%= debug(variable) if RAILS_ENV == 'development' %>

如果你经常这样做,你可能想要创建一个快速帮助方法来清理代码:

def my_debug(debug_variable)
debug_variable if RAILS_ENV == 'development'
end

然后您可以在erb模板/视图中执行此操作

my_debug(variable_here)

答案 1 :(得分:1)

我会四处寻找更好的方法,但现在可能只是一个班轮:

<%= debug(variable) if logger.debug? %>

编辑:如果您打算在任何地方使用此类型的代码,也许帮助程序可以解决问题。

def fancy_debuggin(f)
  debug(f) if logger.debug?
end

<%= fancy_debuggin(variable) %>

答案 2 :(得分:1)

您不需要调用logger.debug吗?用于测试是否打开日志记录的功能,您可以直接调用logger.debug。

使用此方法会导致性能下降,通常非常有限,因为即使记录器未处于调试级别,您也必须评估传递给logger.debug方法的字符串。这只是一个问题,你有一个相对昂贵的字符串。

所以你的代码看起来像这样

<%= logger.debug(variable) %>