Dans une tâche rake, si j'utilise la commande met, je vois la sortie sur la console. Cependant, je ne verrai pas ce message dans le fichier journal lorsque l'application est déployée en production.
Cependant si je dis Rails.logger.info alors en mode développement je ne vois rien sur la console. Je dois aller au fichier journal et le suivre.
Je voudrais idéalement utiliser Rails.logger.info et en mode développement dans la tâche rake, la sortie de l'enregistreur devrait également être envoyée à la console.
Y a-t-il un moyen d'y parvenir?
la source
Rails.logger = Logger.new(STDOUT)
development.rb?config.logger = Logger.new(STDOUT)
Vous pouvez créer une nouvelle tâche de râteau pour que cela fonctionne.
De cette façon, lorsque vous exécutez votre tâche rake, vous pouvez d'abord ajouter to_stdout pour obtenir les messages du journal stdout ou ne pas l'inclure pour que les messages soient envoyés au fichier journal par défaut
la source
Les tâches de rake sont exécutées par un utilisateur, sur une ligne de commande. Tout ce qu'ils ont besoin de savoir immédiatement ("traité 5 lignes") doit être affiché sur le terminal avec
puts
.Tout ce qui doit être conservé pour la postérité ("e-mail d'avertissement envoyé à [email protected]") doit être envoyé au
Rails.logger
.la source
Je dirais que l'utilisation
Rails.logger.info
est la voie à suivre.Vous ne pourrez pas le voir dans la console du serveur car il ne fonctionnera pas via le serveur. Ouvrez simplement une nouvelle console et
tail -f
le fichier journal, cela fera l'affaire.( via )
la source
tailf
"Il est similaire à tail -f mais n'accède pas au fichier lorsqu'il ne grandit pas" (depuis la page de manuel). Il est aussi plus courtCode
Pour les Rails 4 et plus récents, vous pouvez utiliser la diffusion Logger .
Si vous souhaitez obtenir à la fois STDOUT et la journalisation des fichiers pour les tâches de rake en mode développement, vous pouvez ajouter ce code dans
config/environments/development.rb
:Tester
Voici une petite tâche Rake pour tester le code ci-dessus:
Exécution des
rake stdout_and_log:test
sortiestandis que
a été ajouté à
log/development.log
.Exécution des
rake stdout_and_log:test RAILS_ENV=production
sortiestandis que
a été ajouté à
log/production.log
.la source
basename($0) == 'rake'
astuce ne fonctionne plus, car larails
commande elle-même s'exécuterake
. J'adorerais trouver un bon remplacement pour cela au-delà de la tâche qui configure lebroadcast
. (Cette partie, au moins, fonctionne toujours bien.)Rakefile
à la racine de votre projetQue diriez-vous de créer un assistant d'application qui détecte quel environnement est en cours d'exécution et fait ce qu'il faut?
Appelez ensuite output_debug au lieu de put ou logger.info
la source
Dans Rails 2.X pour rediriger l'enregistreur vers STDOUT dans les modèles:
Pour rediriger l'enregistreur dans les contrôleurs:
la source
Exécutez un travail d'arrière-plan avec '&' et ouvrez le script / la console ou autre. De cette façon, vous pouvez exécuter plusieurs commandes dans la même fenêtre.
note Peut devenir rapidement bâclé lorsqu'il y a beaucoup de sortie de journalisation.
la source