2010-05-18 11 views
6

मैं रेक कार्य चलाने के दौरान अपनी लॉग फ़ाइलों को लिखने की कोशिश कर रहा हूं। यह विकास मोड में ठीक काम करता है, लेकिन जैसे ही मैं उत्पादन वातावरण में स्विच करता हूं, लॉग फ़ाइलों में कुछ भी नहीं लिखा जाता है।रेल: उत्पादन मोड में रेक रेक के भीतर से कस्टम लॉग फ़ाइल को कैसे लिखें?

मैं यहाँ पढ़

How do I use a custom log for my rake tasks in Ruby on Rails?

कि इस सामान्य व्यवहार है और भी प्रकाश स्तंभ में एक #wontfix टिकट मिल गया।

मेरा प्रश्न: क्या आउटपुट करने का कोई तरीका है, मेरा रेक कार्य चल रहा है, जबकि क्या हो रहा है? यह कुछ क्रॉलिंग करता है और घंटों तक चलता है। मैं अगर उत्पादन की तरह /log/crawler.log

एक विशिष्ट लॉग फ़ाइल में चला गया पसंद करते हैं अभी मैं सिर्फ लॉग फाइल में लिखने के लिए इस आदेश का उपयोग कर रहा हूँ होगा:

ActiveRecord::Base.logger.info "Log Text" 

धन्यवाद!

+0

मैं में उत्पादन मोड में मेरी रेक कार्य चलाने एक समान परिदृश्य। –

उत्तर

13

आपके पास समस्या यह है कि रेल उत्पादन प्रक्रिया में 'जानकारी' स्तर लॉग को अनदेखा करते हैं।

मैं इस पढ़ने की सलाह देते हैं: http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/classes/Logger.html

और अपने खुद के लकड़हारा बनाने:

logger = Logger.new('logfile.log') 
logger.info "Something happened" 
+0

मैंने यह दृष्टिकोण लिया। यह विकास और स्टेजिंग पर्यावरण में काम कर रहा है। लेकिन logfile.log पर लॉगिंग उत्पादन वातावरण में नहीं हो रहा है। दोनों स्टेजिंग और उत्पादन वातावरण के log_level 1 है - लॉगर :: जानकारी – Anand

2

आप Logger.new ("file.log") के साथ एक नया लकड़हारा और फिर फोन यह कर सकते हैं इस तरह के तरीके।

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 
2

शायद तुम बफर जहां आपको उसकी आवश्यकता को लिखने के लिए की जरूरत है:

logger.flush 

या आप स्वत: फ्लशिंग चालू कर सकते हैं:

task :foo => :environment do 
    Rails.logger.auto_flushing = 1 
    Rails.logger.info "bar" 
end 
संबंधित मुद्दे