রুবি বা রেল কনসোল চালু করার অনেক উপায় আছে:irb , bundle exec irb , bundle console , এবং rails console সবচেয়ে সাধারণ কিছু হয়. তারা একই রকম মনে হয়, কিন্তু তারা প্রত্যেকে একটু ভিন্নভাবে কাজ করে।
আপনি যদি না জানেন যে এই পার্থক্যগুলি কী, আপনার কিছু সমস্যা হবে৷৷ হয়তো আপনি আপনার ActiveRecord মডেলগুলি ডাটাবেসের সাথে সংযুক্ত করতে সক্ষম হবেন না। অথবা আপনার একটি ফাইলের প্রয়োজন হবে এবং ভুল সংস্করণ পাবেন। অথবা একটি লাইব্রেরি যা আপনি উপলব্ধ বলে মনে করেছিলেন, তা ছিল না৷
৷আপনি কিভাবে নিশ্চিত করবেন যে আপনি সঠিক সময়ে সঠিক কনসোল ব্যবহার করছেন?
বান্ডলার বনাম নন-বান্ডলার
irb শুধুমাত্র একটি সাধারণ রুবি কনসোল৷৷ এটি আপনার Gemfile সম্পর্কে চিন্তা করে না . এটি মূল রুবি লাইব্রেরি ছাড়া আর কিছুই লোড করে না। আপনি অন্য কিছু চান, আপনাকে require করতে হবে .
আপনি যদি gem install ব্যবহার করে একটি রত্ন ইনস্টল করেন , আপনি এটি irb এর ভিতরে প্রয়োজন করতে পারেন . আপনি যদি bundle install ব্যবহার করেন , আপনি হয়ত বান্ডলার এটি কোথায় রেখেছে তার উপর নির্ভর করে এটির প্রয়োজন করতে সক্ষম হবেন। (বান্ডলার কখনও কখনও রুবির রত্ন পথের বাইরে রত্ন রাখবে, যদি আপনি bundle install --path এর মতো কিছু চালান অথবা bundle install --deployment )।
যেহেতু irb আপনার Gemfile উপেক্ষা করে , আপনার Gemfile.lock-এর ভিতরের সংস্করণগুলি কোন ব্যাপার না irb এটি খুঁজে পেতে পারে এমন একটি মণির নতুন সংস্করণ লোড করবে:
~/Source/testapps/consoles[master *] jweiss$ gem list rails
*** LOCAL GEMS ***
rails (4.2.0.beta2, 4.2.0.beta1, 4.1.5, 4.1.1)
~/Source/testapps/consoles jweiss$ cat Gemfile | grep rails
gem 'rails', '4.1.5'
~/Source/testapps/consoles jweiss$ irb
irb(main):001:0> require 'rails'
=> true
irb(main):002:0> Rails.version
=> "4.2.0.beta2"
এটি আপনার কোডের সাথে সত্যিই অদ্ভুত সমস্যা সৃষ্টি করতে পারে, যদি আপনি এটি আশা না করেন।
irb আপনি যদি মূল রুবি ফাইলগুলির সাথে তালগোল পাকিয়ে থাকেন তবে এটি দুর্দান্ত। এটি দ্রুত, এবং কোনো সেটআপের প্রয়োজন নেই৷
কিন্তু আপনি যদি আপনার Gemfile ব্যবহার করতে চান যখন আপনি একটি কনসোল চালান, bundle exec irb চালান পরিবর্তে. bundle exec অনুমতি দেয় irb Bundler যে রত্নগুলি সম্পর্কে জানেন তা লোড করতে, এবং শুধুমাত্র৷ রত্ন বান্ডলার সম্পর্কে জানেন:
~/Source/testapps/consoles jweiss$ bundle exec irb
irb(main):001:0> require 'rails'
=> true
irb(main):002:0> Rails.version
=> "4.1.5"
আমরা ঠিক সেই রেল সংস্করণটি পেয়েছি যা আমরা খুঁজছিলাম৷
বান্ডলার/সেটআপ বনাম Bundler.require
আপনি কখন bundle console চালাবেন bundle exec irb এর পরিবর্তে ?
bundle exec irb জিনিসগুলি সেট আপ করে যাতে আপনি শুধুমাত্র আপনার Gemfile.lock-এ রত্নগুলির প্রয়োজন করতে পারেন৷ .
bundle console এক ধাপ এগিয়ে যায়। যখন আপনি bundle console চালান , এমনকি আপনার Gemfile-এ রত্নগুলির প্রয়োজনও নেই৷ . সেগুলি ইতিমধ্যেই আপনার জন্য প্রয়োজনীয়:
~/Source/testapps/consoles jweiss$ bundle exec irb
irb(main):001:0> Rails.version
NameError: uninitialized constant Rails
from (irb):1
from /usr/local/bin/irb:11:in `<main>'
~/Source/testapps/consoles jweiss$ bundle console
irb(main):001:0> Rails.version
=> "4.1.5"
আপনি Bundler.require কল করলেও আপনি এই আচরণ পেতে পারেন আপনার bundle exec irb এর ভিতরে কনসোল আপনার Gemfile-এ যেকোনো রত্ন যেটিকে require: false হিসেবে চিহ্নিত করা হয়নি স্বয়ংক্রিয়ভাবে প্রয়োজন হবে, এবং আপনি কোনো অতিরিক্ত কাজ ছাড়াই এটি ব্যবহার করতে সক্ষম হবেন। আপনি যখন একটি Gemfile দিয়ে প্রকল্পে কাজ করছেন , এটা অবিশ্বাস্যভাবে সুবিধাজনক।
অ্যাক্সেসিং রেল
চিন্তা করার জন্য এখনও একটি পার্থক্য আছে:bundle console এবং rails console .
~/Source/testapps/consoles jweiss$ bundle console
irb(main):001:0> Rails.application
=> nil
~/Source/testapps/consoles jweiss$ rails console
Loading development environment (Rails 4.1.5)
irb(main):001:0> Rails.application
=> #<Consoles::Application:0x007f8db4d5ab30 @_all_autoload_paths=["/Users/jweiss...
bundle console শুধু রত্ন একটি গুচ্ছ প্রয়োজন. rails console সেই রত্নগুলির প্রয়োজন, কিন্তু এটি আপনার সমগ্র রেল পরিবেশ লোড করবে, স্বয়ংক্রিয় লোডিং সেট আপ করবে, আপনার অ্যাপ্লিকেশন শুরু করবে এবং আপনাকে খেলার জন্য একটি সম্পূর্ণ রেল পরিবেশ দেবে৷
আপনি bundle console থেকে রেল কনসোলের মতো কিছু পেতে পারেন যদি আপনার config/environment.rb প্রয়োজন হয় :
~/Source/testapps/consoles jweiss$ bundle console
irb(main):001:0> Rails.application
=> nil
irb(main):002:0> require_relative 'config/environment.rb'
=> true
irb(main):003:0> Rails.application
=> #<Consoles::Application:0x007fd264f0b7c8 @_all_autoload_paths=["/Users/jweiss...
প্রতিটি, একটু বেশি জটিল
সুতরাং, সংক্ষেপে:
-
irbহল মৌলিক রুবি কনসোল৷৷ এটি আপনারGemfileউপেক্ষা করে , এবং শুধুমাত্র মূল রুবি ক্লাসগুলিrequireছাড়াই অ্যাক্সেসযোগ্য - তাদের. এটি সহজে রত্ন লোড করতে পারে না যা Bundler RubyGems এর লোড পাথের বাইরে ইনস্টল করে। -
৷bundle exec irbirbএর মত , যদি আপনারওbundler/setupপ্রয়োজন হয় . আপনি সহজেই আপনারGemfile.lock-এ থাকা রত্নগুলির প্রয়োজন করতে পারেন৷ , কিন্তু বান্ডলার যেখানেই রাখুক না কেন আপনি সেই রত্নগুলি লোড করতে পারেন৷ -
bundle consolebundle exec irbএর মত , যদি আপনিBundler.requireনামেও ডাকেন . আপনারGemfile-এর সমস্ত রত্ন , চিহ্নিতrequire: falseছাড়া , তাদের প্রয়োজন ছাড়া ব্যবহার করা যেতে পারে. আপনি যখন নিজের রত্ন লিখছেন, বা নন-রেল কোডে কাজ করছেন তখন এটি সত্যিই সুবিধাজনক৷ -
৷rails consolebundle consoleচালানোর মত আপনার যদিconfig/environment.rbপ্রয়োজন হয় তাহলে একটি Rails অ্যাপের ভিতরে . আপনি আপনার সম্পূর্ণ Rails অ্যাপের সাথে খেলতে পারেন, অটোলোড এবং ডাটাবেস সংযোগগুলি কাজ করে এবং সবকিছু আপনার প্রত্যাশার মতো হয়ে গেছে। আপনি যদি একটি Rails অ্যাপে কাজ করেন, এটি হল সবচেয়ে সহায়ক ধরনের কনসোল৷
এই কনসোলগুলির মধ্যে খুব বেশি পার্থক্য নেই। এবং যদিও এই পার্থক্যগুলির বেশিরভাগই খুব বড় হবে না (ওহ, এই ফাইলটির প্রয়োজন নেই? আরও ভাল এটির প্রয়োজন!), অন্যরা সম্পূর্ণভাবে বিরক্ত করবে যদি আপনি না জানেন যে কী চলছে৷ (কেন এটা আবার রাকের ভুল সংস্করণ লোড হচ্ছে!?)
কিন্তু আপনি যদি এই কনসোলের প্রতিটির পিছনের ধারণাটি জানেন তবে আপনি সঠিক সময়ে সঠিক ধরনের কনসোল ব্যবহার করতে সক্ষম হবেন। এবং আপনার প্রয়োজনীয় সমস্ত লাইব্রেরি আপনার প্রয়োজনের সময় কাছে থাকবে।