met vs logger dans les rails râteau tâches
Dans une tâche rake si j'utilise met de commande puis-je voir la sortie sur console. Cependant je ne vais pas voir ce message dans le fichier journal lorsque l'application est déployée sur la production.
Cependant si je dis Rails.logger.info ensuite, le mode de développement, je ne vois rien sur la console. J'ai besoin d'aller vers le fichier de log et de la queue qui.
J'ai l'idéal serait d'utiliser Rails.logger.info et le mode de développement à l'intérieur de la tâche rake, la sortie de l'enregistreur doivent également être envoyés à la console.
Est-il un moyen d'y parvenir?
Vous devez vous connecter pour publier un commentaire.
Mettre cela en
application.rb
, ou dans une tâche rake initialiser le codeC'est de Rails 3, du code. Notez que cela va remplacer la journalisation à
development.log
. Si vous souhaitez à la foisSTDOUT
etdevelopment.log
vous aurez besoin d'une fonction wrapper.Si vous souhaitez que ce comportement uniquement dans les Rails de la console, placez le même bloc de code dans votre
~/.irbrc
.Rails.logger = Logger.new(STDOUT)
en développement.rb?config.logger = Logger.new(STDOUT)
Vous pouvez créer une nouvelle tâche rake pour obtenir que cela fonctionne.
De cette façon, lorsque vous exécutez votre tâche rake vous pouvez ajouter to_stdout premier à obtenir la sortie standard les messages de journal ou de ne pas l'inclure à faire envoyer des messages pour le fichier journal par défaut
Râteau tâches sont exécutées par un utilisateur, sur une ligne de commande. Tout ce qu'ils ont besoin de savoir tout de suite ("traités de 5 lignes) doit être sortie sur le terminal avec
puts
.Tout ce qui doit être conservé pour la postérité ("envoyé email d'avertissement de [email protected]") doit être envoyé à la
Rails.logger
.Je dirais que l'utilisation de
Rails.logger.info
est le chemin à parcourir.Vous ne serez pas en mesure de le voir dans la console du serveur, car il ne sera pas exécuté par le serveur. Il suffit d'ouvrir une console et
tail -f
le fichier de log, il va faire l'affaire.(via)
tailf
"Il est semblable à la queue -f mais ne pas accéder au fichier lorsqu'il n'est pas en croissance" (à partir de la page de manuel). Il est plus court aussiCode
Pour les Rails 4 et versions ultérieures, vous pouvez utiliser Enregistreur de diffusion.
Si vous voulez obtenir à la fois la sortie standard et la journalisation dans un fichier de râteau tâches, le mode de développement, vous pouvez ajouter ce code dans
config/environments/development.rb
:Test
Voici une petite tâche Rake pour tester le code ci-dessus :
De course
rake stdout_and_log:test
sortiestout
a été ajouté à
log/development.log
.De course
rake stdout_and_log:test RAILS_ENV=production
sortiestout
a été ajouté à
log/production.log
.basename($0) == 'rake'
astuce ne fonctionne plus, parce que lerails
commande s'exécute lui-mêmerake
. J'aimerais trouver un bon remplacement pour elle au-delà en fonction d'une tâche qui met en place lebroadcast
. (La partie, au moins, fonctionne toujours très bien.)Rakefile
à la racine de votre projetComment sur la création d'une application helper, qui détecte l'environnement est en cours d'exécution et fait la bonne chose?
Alors appel output_debug au lieu de vente ou de logger.info
Dans Les Rails 2.X pour la redirection de l'enregistreur vers la sortie standard dans les modèles:
Pour rediriger enregistreur de contrôleurs:
Exécuter une tâche en arrière-plan avec des "& " et ouvrez le script/console ou quoi..
De cette façon, vous pouvez exécuter plusieurs commandes dans la même fenêtre.
note Peut obtenir bâclée rapidement quand il y a beaucoup de sortie d'enregistrement.