8
votes

Rails: Comment écrire dans un fichier journal personnalisé à partir d'une tâche Rake en mode de production?

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"


1 commentaires

Je gère mes tâches de râteau en mode de production dans un scénario similaire.


3 Réponses :


15
votes

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

et créer votre propre enregistreur: xxx


1 commentaires

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



3
votes

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


0 commentaires

2
votes

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


0 commentaires