2009-09-04 3 views
1

Je veux imprimer des messages de débogage dans mon modèle de erb quand il est appelé en mode de développement, mais pas quand il est appelé en mode de production (par exemple)Comment déboguer des messages dans erb être supressed en mode production

<%= debug variable_name %> 

Cependant, ceci sera imprimé dans n'importe quel mode.

Je trouve que je peux faire

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

qui semble fonctionner. Est-ce la bonne façon, ou existe-t-il une solution plus élégante?

Répondre

3

Vous voulez sans doute faire quelque chose comme ceci:

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

Si vous faites cela souvent, vous voudrez peut-être créer un rapide méthode d'assistance pour nettoyer le code un peu plus:

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

Ensuite, vous pouvez le faire dans votre modèle erb/v iew

my_debug(variable_here) 
1

Je vais regarder autour d'une meilleure façon, mais pour l'instant qui pourrait être une seule ligne:

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

Edit: Si vous allez avoir ce type de code partout peut-être une aide serait faire l'affaire.

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

<%= fancy_debuggin(variable) %> 
1

Vous n'avez pas besoin d'appeler le fichier logger.debug? fonction pour tester si la journalisation est activée, vous pouvez passer un appel direct à logger.debug.

Il y a une atteinte des performances, généralement assez marginale, avec cette approche car vous devez évaluer la chaîne transmise à la méthode logger.debug même si l'enregistreur n'est pas au niveau de débogage. C'est seulement un problème où vous avez une chaîne relativement chère.

donc votre code ressemblerait à quelque chose comme ça

<%= logger.debug(variable) %> 
+0

Cela ne s'imprime pas dans la vue? –

+0

Eh bien cela dépend. Lorsque le niveau de journalisation est défini sur déboguer, il le fait. Quand il est réglé à un niveau supérieur, par ex. info ou avertir alors non, il ne le fait pas. –

Questions connexes