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

问题描述 投票:1回答:3

我想在开发模式下调用erb模板时打印一些调试消息,但在生产模式下调用时不打印(例如)

<%= debug variable_name %>

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

我发现我能做

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

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

ruby-on-rails ruby debugging erb
3个回答
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
投票

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

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

编辑:如果您到处都有这种类型的代码,也许有一个助手可以解决问题。

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

<%= fancy_debuggin(variable) %>

1
投票

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

这种方法会降低性能,通常很小,因为即使记录器不在调试级别,您也必须评估传递给logger.debug方法的字符串。 仅当您拥有相对昂贵的字符串时,这才是问题。

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

<%= logger.debug(variable) %>
© www.soinside.com 2019 - 2024. All rights reserved.