2010-03-17 12 views
59

एक बैश कंसोल पर करने के लिए सांत्वना उत्पादन रीडायरेक्ट कर रहा है, मैं यह कर यदि:रेल - एक फ़ाइल

cd mydir 
ls -l > mydir.txt 

> ऑपरेटर मानक इनपुट कब्जा है और एक फाइल करने के लिए यह पुनर्निर्देश; तो मुझे मानक आउटपुट के बजाय mydir.txt में फ़ाइलों की सूची मिलती है।

क्या रेलवे कंसोल पर कुछ ऐसा करने का कोई तरीका है?

मुझे एक रूबी स्टेटमेंट मिला है जो बहुत सारे प्रिंट (~ 8k लाइन) उत्पन्न करता है और मैं इसे पूरी तरह से देख सकता हूं, लेकिन कंसोल केवल अंतिम 1024 लाइनों को याद करता है या नहीं। तो मैंने एक फाइल को रीडायरेक्ट करने के बारे में सोचा - अगर कोई बेहतर विकल्प जानता है, तो मैं सभी कान हूं।

उत्तर

77

आप कंसोल आउटपुट पुनर्निर्देशित करने के लिए ओवरराइड $stdout उपयोग कर सकते हैं:

$stdout = File.new('console.out', 'w') 

आप भी इस एक बार फोन करने के लिए आवश्यकता हो सकती है:

$stdout.sync = true 

इस फ़ाइल के लिए सभी उत्पादन पर पहुंच जाएंगे। यदि आप अस्थायी रूप से आउटपुट को रीडायरेक्ट करना चाहते हैं तो सुनिश्चित करें कि आप $stdout के मूल मान को संग्रहीत करते हैं ताकि आप इसे वापस बदल सकें।

+0

धन्यवाद:

rails c | tee output.txt 

टी आदेश भी कई अन्य विकल्प है जो आप से बाहर की जाँच कर सकते हैं! यही वह है जिसकी तलाश में मैं हूं। – kikito

+2

यह मेरे लिए तब तक काम नहीं करता जब तक कि मैंने 'stdout.sync = true' जोड़ा। संपादित। –

+2

'$ stdout.reopen (" my.log "," w ") 'एक और अधिक सुरुचिपूर्ण समाधान प्रतीत होता है, जो यहां देखा गया है: http://stackoverflow.com/a/2480439/21217 – dain

3

यदि आप अपनी पर्यावरण फ़ाइल में निम्न कोड लिखते हैं, तो इसे काम करना चाहिए।

if "irb" == $0 
    config.logger = Logger.new(Rails.root.join('path_to_log_file.txt')) 
end 

तुम भी

config.logger = Logger.new(Rails.root.join('path_to_log_file.txt'), number_of_files, file_roation_size_threshold) 

का उपयोग कर केवल सक्रिय रिकॉर्ड से संबंधित कार्यों के प्रवेश करने के लिए लॉग फ़ाइल घुमा सकते हैं, तो आप

ActiveRecord::Base.logger = Logger.new(Rails.root.join('path_to_log_file.txt')) 

क्या कर सकते हैं यह भी मदद से आप विभिन्न लकड़हारा config/फ़ाइल है विभिन्न वातावरण के लिए।

+0

यह सहायक है, लेकिन दूसरा जवाब वह है जो मैं एक सरल तरीके से चाहता था। वैसे भी जवाब देने के लिए समय लेने के लिए धन्यवाद। – kikito

2

hirb का उपयोग करें। यह स्वचालित रूप से किसी भी आउटपुट को इरब में पेज करता है जो एक स्क्रीनफुल से अधिक लंबा होता है। इस काम को देखने के लिए एक कंसोल सत्र में इस रखो:

>> require 'rubygems' 
>> require 'hirb' 
>> Hirb.enable 
यह कैसे काम करता पर

अधिक के लिए, read this post

+0

उत्तर देने के लिए धन्यवाद, लेकिन मैं पेजिनेशन की तलाश नहीं कर रहा था; मैं एक ही पेज पर सबकुछ देखना चाहता था। – kikito

101

आप एक त्वरित एक बंद समाधान के लिए देख रहे हैं, बस निम्नलिखित का उपयोग करें:

irb(main):001:0> f = File.new("statements.xml", 'w') 
irb(main):002:0> f << Account.find(1).statements.to_xml 
irb(main):003:0> f.close 

एक JSON स्थिरता

>> f = File.new(Rails.root + 'spec/fixtures/qbo/amy_cust.json', 'w') 
>> f << JSON.pretty_generate((q.get :customer, 1).as_json) 
>> f.close 
+0

बिल्कुल वही जो मैं खोज रहा था, कृपया धन्यवाद! – kermitology

+0

ने मुझे # 'या 'अपरिभाषित विधि' कथन 'के लिए' NoMethodError: अपरिभाषित विधि 'कथन' # ' :( – Magne

+4

फ़ाइल 'statement.xml' कहां है सिस्टम में सहेजा गया। मुझे फ़ाइल नहीं मिल रही है। – SujitS

3

Hirb का प्रयोग बनाएं, आप केवल लॉग इन करने के लिए चुन सकते हैं एक पाठ फ़ाइल में हिरब आउटपुट। इससे आपको कंसोल विंडो में टाइप किए गए आदेशों को अभी भी देखने में सक्षम बनाता है, और केवल मॉडल आउटपुट फ़ाइल पर जाएगा।

से

Hirb readme:

हालांकि डिफ़ॉल्ट रूप से देखा गया STDOUT करने के लिए मुद्रित कर रहे हैं, वे आसानी से कहीं भी लिखने के लिए संशोधित किया जा सकता:

# Setup views to write to file 'console.log'. 
>> Hirb::View.render_method = lambda {|output| File.open("console.log", 'w') {|f| f.write(output) } } 

# Doesn't write to file because Symbol doesn't have a view and thus defaults to irb's echo mode. 
>> :blah 
=> :blah 

# Go back to printing Hirb views to STDOUT. 
>> Hirb::View.reset_render_method 
+0

इसके लिए धन्यवाद, ठीक वही मैं क्या देख रहा था! – sbonami

2

अलावा Veger के जवाब से, और अधिक तरीके से करना में से एक है यह कई अन्य अतिरिक्त विकल्प भी प्रदान करता है।

बस अपने रेल परियोजना निर्देशिका को खोलने और कमांड दर्ज करें:

man tee 
संबंधित मुद्दे