কীভাবে রেলস কনসোল / আইআরবি আউটপুট দমন করবেন


89

আমি একটি বেশ অদ্ভুত সমস্যা আটকে আছি।

আমি রেলস কনসোলের আমাদের প্রোডাকশন সার্ভারে কিছু ডিবি এন্ট্রি পরীক্ষা করছিলাম যেখানে প্রায় সমস্ত কমান্ডই প্রচুর পরিমাণে ও / পি লাইন তৈরি করেছিল, যার কারণে এসএসএস চ্যানেল ফাঁসিতে ঝুলছে :(

কনসোল / আইআরবি স্ক্রিনফুলগুলি দমন করার কোনও উপায় আছে কি?

ধন্যবাদ

উত্তর:


192

আপনি সংযোজন করতে পারেন ; শূন্য সব আপনার আপনার কমান্ড / বিবৃতি।

উদাহরণ:

users = User.all; nil

আসলে আইআরব শেষ সম্পাদিত বিবৃতিটির (রিটার্ন) মান মুদ্রণ করে। সুতরাং এক্ষেত্রে এটি কেবল শূন্য প্রিন্ট করবে কারণ শূন্যপুর্ণ শেষ কার্যকর কার্যকর বিবৃতি :)


13
আশ্চর্যজনক, একটি আরও ছোট উপায় হল আধা-কোলন যার পরে কোনও বস্তু অনুসরণ করবেusers = User.all; 0
বব

4
এটি কেবল পি ও পুটসের কাজ নয়, ফিরে আসা সামগ্রীর জন্য কাজ করে।
the_minated

এটি কেবল একটি হ্যাক, আপনি Users.all.countকেবল একটি লাইন আউটপুট যেমন গণনা ব্যবহার করতে পারেন , এবং আপনি যদি ভেরিয়েবলের আউটপুট সংরক্ষণ করতে চান তবে এটি করা যেতে পারেusers = User.all; Users.all.count
তাসওয়ার হুসেন

31

কীভাবে আইআরবি / কনসোল আউটপুটটি নিঃশব্দ করা যায় তার সমাধানের সন্ধানে, আমি একটি উত্তরও পেয়েছি austinruby.com এ :

নীরবতা:

conf.return_format = ""

ডিফল্ট আউটপুট:

conf.return_format = "=> %s\n"

উদাহরণস্বরূপ 512 অক্ষরের সীমা:

conf.return_format = "=> limited output\n %.512s\n"

খুব দরকারী. আইআরবি / রেলস কনসোলটি খোলার সময় এটি নির্ধারণের কোনও উপায় নেই, অর্থাত্ প্যারামিটারে ওরফে ওরফে?
কাচে

আপনি এটিকে OME HOM / .irbrc
hdgarrood

8

এখানে, এটি আপনার ~ / .irbrc এ যুক্ত করুন:

require 'ctx'
require 'awesome_print'

module IRB
  class Irb    
    ctx :ap do
      def output_value()
        ap(@context.last_value)
      end
    end
    ctx :puts do
      def output_value()
        puts(@context.last_value)
      end
    end
    ctx :p do
      def output_value()
        p(@context.last_value)
      end
    end
    ctx :quiet do
      def output_value()
      end
    end
  end
end

def irb_mode(mode)
  ctx(mode) { irb }
end

(দ্রষ্টব্য: অবশ্যই আপনাকে ctxপ্রথমে রত্নটি ইনস্টল করতে হবে , যদিও awesome_printএটি অবশ্যই alচ্ছিক, অবশ্যই))

এখন আপনি যখন আইআরবি ব্যবহার করে এমন কোনও কনসোল এ থাকেন, আপনি নিম্নলিখিতটি করতে পারেন:

স্বাভাবিক অবস্থা:

irb(main):001:0> { this:'is a complex object', that:[ { will:'probably'}, { be:'good to read' } ], in:{ some:{ formatted:'way'} } }

=> {:this=>"is a complex object", :that=>[{:will=>"probably"}, {:be=>"good to read"}], :in=>{:some=>{:formatted=>"way"}}}

হ্যাঁ, ঠিক আপনি যা আশা করেন

awesome_print মোড:

irb(main):002:0> irb_mode(:ap)
irb#1(main):001:0> { this:'is a complex object', that:[ { will:'probably'}, { be:'good to read' } ], in:{ some:{ formatted:'way'} } }

=> {
    :this => "is a complex object",
    :that => [
        [0] {
            :will => "probably"
        },
        [1] {
            :be => "good to read"
        }
    ],
      :in => {
        :some => {
            :formatted => "way"
        }
    }
}

... বাহ, এখন সবকিছু দুর্দান্তভাবে ছাপা হচ্ছে! :)

শান্ত ভাব:

irb#1(main):002:0> irb_mode(:quiet)
irb#1(main):001:0> { this:'is a complex object', that:[ { will:'probably'}, { be:'good to read' } ], in:{ some:{ formatted:'way'} } }
irb#1(main):002:0>

... ওহ, আউটপুট আদৌ নেই? ভাল লাগল

যাইহোক, আপনি নিজের পছন্দমতো মোড যুক্ত করতে পারেন, এবং যখন আপনি সেই মোডটি শেষ করেন, কেবল exitবাইরে বা এটি, এবং আপনি আগের মোডে ফিরে আসবেন।

আশা করি যে সহায়ক ছিল! :)


4

আইআরবি-র মধ্যে নিম্নলিখিতটি চালানো আমার পক্ষে কাজ করে:

irb_context.echo = false


4

সুপারপ্রেস আউটপুট, সাধারণভাবে

এছাড়াও, আপনার প্রয়োজনের উপর নির্ভর করে , কেবল আইআরবি / কনসোলে নয়, সাধারণভাবে আউটপুট ব্যবহার quietlyবা silence_streamদমন করার জন্য একবার নজর দিন :

silence_stream(STDOUT) do
  users = User.all
end

দ্রষ্টব্য: silence_stream5+ রেলের মধ্যে সরানো হয়েছে।

দ্রষ্টব্য: quietlyরুবি ২.২.০ এ অবমূল্যায়ন করা হবে এবং শেষ পর্যন্ত সরানো হবে। (ধন্যবাদ বেনমারগানআইও !)

আরও তথ্য এখানে পাওয়া যাবে

প্রায় 5+ রেলের জন্য কাজ করুন Work

উপরে উল্লিখিত হিসাবে, silence_streamআর এটি উপলব্ধ নেই কারণ এটি থ্রেড নিরাপদ নয়। কোনও থ্রেড নিরাপদ বিকল্প নেই। তবে আপনি যদি এখনও ব্যবহার করতে চান silence_streamএবং সচেতন হন যে এটি থ্রেড নিরাপদ নয় এবং এটি বহুবিধভাবে ব্যবহার করা হচ্ছে না, আপনি ম্যানুয়ালি এটিকে একটি আরম্ভকারী হিসাবে আবার যুক্ত করতে পারেন।

config/initializer/silence_stream.rb

# Re-implementation of `silence_stream` that was removed in Rails 5 due to it not being threadsafe.
# This is not threadsafe either so only use it in single threaded operations.
# See https://api.rubyonrails.org/v4.2.5/classes/Kernel.html#method-i-silence_stream.
#
def silence_stream( stream )
  old_stream = stream.dup
  stream.reopen( File::NULL )
  stream.sync = true
  yield

ensure
  stream.reopen( old_stream )
  old_stream.close
end

4
নোটটি quietlyরুবি ২.২.০ এ অবমূল্যায়িত হয়েছে এবং এটি সরানো হবে।
বেনমর্গানআইও

@ বেনমোরগানআইও উত্তরে একটি নোট যুক্ত করেছেন। তার জন্য ধন্যবাদ!
জোশুয়া পিন্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.