রুবি বা রেল কনসোল চালু করার অনেক উপায় আছে: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 irb
irb
এর মত , যদি আপনারওbundler/setup
প্রয়োজন হয় . আপনি সহজেই আপনারGemfile.lock
-এ থাকা রত্নগুলির প্রয়োজন করতে পারেন৷ , কিন্তু বান্ডলার যেখানেই রাখুক না কেন আপনি সেই রত্নগুলি লোড করতে পারেন৷ -
bundle console
bundle exec irb
এর মত , যদি আপনিBundler.require
নামেও ডাকেন . আপনারGemfile
-এর সমস্ত রত্ন , চিহ্নিতrequire: false
ছাড়া , তাদের প্রয়োজন ছাড়া ব্যবহার করা যেতে পারে. আপনি যখন নিজের রত্ন লিখছেন, বা নন-রেল কোডে কাজ করছেন তখন এটি সত্যিই সুবিধাজনক৷ -
rails console
bundle console
চালানোর মত আপনার যদিconfig/environment.rb
প্রয়োজন হয় তাহলে একটি Rails অ্যাপের ভিতরে . আপনি আপনার সম্পূর্ণ Rails অ্যাপের সাথে খেলতে পারেন, অটোলোড এবং ডাটাবেস সংযোগগুলি কাজ করে এবং সবকিছু আপনার প্রত্যাশার মতো হয়ে গেছে। আপনি যদি একটি Rails অ্যাপে কাজ করেন, এটি হল সবচেয়ে সহায়ক ধরনের কনসোল৷
এই কনসোলগুলির মধ্যে খুব বেশি পার্থক্য নেই। এবং যদিও এই পার্থক্যগুলির বেশিরভাগই খুব বড় হবে না (ওহ, এই ফাইলটির প্রয়োজন নেই? আরও ভাল এটির প্রয়োজন!), অন্যরা সম্পূর্ণভাবে বিরক্ত করবে যদি আপনি না জানেন যে কী চলছে৷ (কেন এটা আবার রাকের ভুল সংস্করণ লোড হচ্ছে!?)
কিন্তু আপনি যদি এই কনসোলের প্রতিটির পিছনের ধারণাটি জানেন তবে আপনি সঠিক সময়ে সঠিক ধরনের কনসোল ব্যবহার করতে সক্ষম হবেন। এবং আপনার প্রয়োজনীয় সমস্ত লাইব্রেরি আপনার প্রয়োজনের সময় কাছে থাকবে।