Как можно подавить отладочные сообщения в erb в производственном режиме

Я хочу распечатать некоторые отладочные сообщения в моем шаблоне erb, когда он вызывается в режиме разработки, но не когда он вызывается в производственном режиме (т.е.)

<%= debug variable_name %>

Однако это будет напечатано в любом режиме.

Я обнаружил, что могу сделать

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

который, кажется, работает. Это правильный путь или есть более элегантное решение?


person txwikinger    schedule 04.09.2009    source источник


Ответы (3)


Вы, вероятно, хотите сделать что-то вроде этого:

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

Если вы делаете это часто, вы можете создать быстрый вспомогательный метод, чтобы немного очистить код:

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

Затем вы можете сделать это в своем шаблоне/представлении erb.

my_debug(variable_here)
person Carlos    schedule 04.09.2009

Я поищу лучший способ, но пока это может быть один лайнер:

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

Редактировать: Если вы собираетесь везде использовать этот тип кода, возможно, вам поможет помощник.

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

<%= fancy_debuggin(variable) %>
person Andy Gaskell    schedule 04.09.2009

Вам не нужно вызывать logger.debug? чтобы проверить, включено ли ведение журнала, вы можете сделать прямой вызов logger.debug.

При таком подходе происходит падение производительности, обычно довольно незначительное, поскольку вам нужно оценить строку, переданную методу logger.debug, даже если регистратор не находится на уровне отладки. Это проблема только в том случае, если у вас относительно дорогая строка.

Итак, ваш код будет выглядеть примерно так

<%= logger.debug(variable) %>
person Steve Weet    schedule 04.09.2009
comment
Ну это зависит. Когда уровень журнала установлен на отладку, он делает. Когда он установлен на более высокий уровень, например. информация или предупреждение, то нет, это не так. - person Steve Weet; 04.09.2009