J'essaie d'écrire dans mes fichiers journaux tout en exécutant une tâche Rake. Cela fonctionne bien en mode de développement, mais dès que je passe à l'environnement de production, rien n'est écrit dans les fichiers journaux.
J'ai lu ici p>
Comment utiliser un journal personnalisé pour mon râte des tâches dans Ruby sur rails? p>
C'est le comportement normal et a également trouvé un ticket #wontfix en phare. P>
Ma question: y a-t-il un moyen de produire , qu'est-ce qui se passe pendant que ma tâche de râteau est en cours d'exécution? Il effectue des coups de rampants et couronnes pendant des heures. Je préférerais si la sortie est allée dans un fichier journal spécifique comme /log/crawler.logleight/p >p, je suis maintenant à l'aide de cette commande pour écrire dans les fichiers journaux: P>
ActiveRecord::Base.logger.info "Log Text"
3 Réponses :
Le problème que vous rencontrez est que les rails ignorent les journaux de niveau des «info» en mode de production.
Je vous recommanderais de lire ceci: http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/classes/logger.html P >
et créer votre propre enregistreur: p>
J'ai pris cette approche. Il travaille dans le développement et l'environnement de mise en scène. Mais vous connecter à logfile.log ne se produit pas dans l'environnement de production. Log_level des environnements de mise en scène et de production est 1 - Logger :: Info
Vous pouvez créer un nouvel enregistreur avec LOGGER.NEW ("FILE.LOG"), puis appelez les méthodes telles que ceci.
task :import_stuff => :environment do require 'csv' l = Logger.new("stuff.log") csv_file = "#{RAILS_ROOT}/stuff.csv" CSV.open(csv_file, 'r') do |row| l.info row[1] end end
Peut-être que vous devez écrire le tampon où vous en avez besoin:
task :foo => :environment do Rails.logger.auto_flushing = 1 Rails.logger.info "bar" end
Je gère mes tâches de râteau en mode de production dans un scénario similaire.