ruby on rails - কিভাবে RVM এবং rbenv আসলে কাজ করে?




ruby-on-rails rubygems (4)

আমি একটি গভীরতার নিবন্ধ লিখেছিলাম: http://niczsoft.com/2011/11/what-you-should-know-about-rbenv-and-rvm/

শেল পরিবেশ পরিবর্তিত হয় যেখানে মৌলিক পার্থক্য হয়:

  • RVM: আপনি রুবি পরিবর্তন করলে এটি পরিবর্তিত হয়।
  • rbenv: আপনি রুবি / মীম এক্সিকিউটেবল চালানোর সময় এটি পরিবর্তিত হয়।

এছাড়াও, RVM সম্পর্কে জিনিসটি, রুবি পরিচালনা করার পরে এটি আরও অনেক কিছু জুড়ে দেয়, এটি অন্য কোনও যন্ত্রের চেয়ে অনেক বেশি (অন্যরা RVM এবং Rbenv থেকে পৃথক থাকে: https://twitter.com/#!/mpapis/status/171714447910502401 )

Freenode সার্ভারগুলিতে "#rvm" চ্যানেলে আপনি IRC- এ তাত্ক্ষণিক সমর্থন সম্পর্কে ভুলে যান না।

আমি কিভাবে RVM এবং rbenv আসলে কাজ করতে আগ্রহী।

স্পষ্টতই তারা রুবি এবং রত্নের বিভিন্ন সংস্করণগুলির মধ্যে সাঁতার কাটায়, কিন্তু এটি কীভাবে অর্জিত হয়? আমি মনে করতাম তারা সিমলিংকগুলি সহজেই আপডেট করছিল, কিন্তু কোডটিতে ঢুকে পড়ে (এবং আমি অবশ্যই আমার বশের জ্ঞানটি অতিপ্রাকৃত বলে স্বীকার করি) তারা এই থেকে বেশি কিছু করতে থাকে।


তাই উপরের চমৎকার উত্তরগুলির সংক্ষিপ্তসারের জন্য, রুবিয়ের সংস্করণটি নির্বাচন করা হলে RVM এবং rbenv এর মধ্যে প্রধান ব্যবহারিক পার্থক্য হয়।

rbenv:

rbenv আপনার পাথের শুরুতে একটি শিম যোগ করে, রুবি নামে একই নামের একটি কমান্ড। যখন আপনি একটি কমান্ড লাইনে ruby টাইপ করেন তখন শিমটি পরিবর্তে চালিত হয় (কারণ এটি "রুবি" নামেও পরিচিত এবং পথটিতে প্রথম আসে)। Shim একটি পরিবেশগত পরিবর্তনশীল বা। .rbenv_version ফাইলের জন্য এটি .rbenv_version কোন সংস্করণে তা প্রতিনিধিত্ব করতে বলে।

RVM:

RVM আপনাকে rvm use করে সরাসরি রুবি একটি সংস্করণ সেট করতে দেয়। উপরন্তু, এটি cd সিস্টেম কমান্ডকে ওভাররাইড করে। যখন আপনি একটি .rvmrc ফাইল ধারণকারী ফোল্ডারে cd করেন, তখন .rvmrc ফাইলের ভিতরে .rvmrc কার্যকর হয়। এটি রুবি সংস্করণ, বা আপনি অভিনব অন্য কিছু সেট করতে ব্যবহার করা যেতে পারে।

অন্যান্য পার্থক্য:

অবশ্যই অন্যান্য পার্থক্য আছে। আরভিভিটিতে বক্সের বাইরে জেমসেট আছে, আর রেনভের কিছুটা হ্যাকিংয়ের প্রয়োজন রয়েছে (তবে বেশি নয়)। উভয় সমস্যা কার্যকরী সমাধান।


সংক্ষিপ্ত ব্যাখ্যা: rbenv আপনার পরিবেশের PATH মধ্যে hooking দ্বারা কাজ করে। ধারণা সহজ, কিন্তু শয়তান বিস্তারিত হয়; নীচের সম্পূর্ণ scoop।

প্রথম, ruby আপনার সমস্ত ইনস্টল করা সংস্করণ জুড়ে সমস্ত কমান্ড ( ruby , irb , rake , gem ইত্যাদি) জন্য shims তৈরি করে। এই প্রক্রিয়া rehashing বলা হয়। প্রতিবার আপনি রুবিয়ের একটি নতুন সংস্করণ ইনস্টল করেন বা একটি কমান্ড সরবরাহ করে এমন একটি মীম ইনস্টল করেন, কোনও নতুন কমান্ড shimmed হয় তা নিশ্চিত করতে rbenv rbenv rehash

এই shims একটি একক ডিরেক্টরি ( ~/.rbenv/shims ডিফল্ট দ্বারা ~/.rbenv/shims ) বাস। Rbenv ব্যবহার করার জন্য, আপনার PATH সামনে শুধুমাত্র shims ডিরেক্টরি যোগ করতে হবে:

export PATH="$HOME/.rbenv/shims:$PATH"

তারপর যেকোন সময় আপনি কমান্ড লাইন থেকে ruby চালান, অথবা সেপ্টংটি চালান যার শেব্যাং #!/usr/bin/env ruby ~/.rbenv/shims/ruby #!/usr/bin/env ruby , আপনার অপারেটিং সিস্টেমটি প্রথমে ~/.rbenv/shims/ruby এবং অন্য ruby পরিবর্তে এটি চালানো হবে। এক্সিকিউটেবল আপনি ইনস্টল থাকতে পারে।

প্রতিটি শিম একটি ক্ষুদ্র বাশ স্ক্রিপ্ট যা ঘুরে rbenv exec চালায়। সুতরাং আপনার পথে irb সাথে, irb rbenv exec irb সমতুল্য, এবং ruby -e "puts 42" rbenv exec ruby -e "puts 42" ruby -e "puts 42" এর সমতুল্য।

rbenv exec কমান্ডটি rbenv exec কোন সংস্করণটি আপনি ব্যবহার করতে চান তা চিত্র করে, তারপরে সেই সংস্করণের জন্য সংশ্লিষ্ট কমান্ডটি চালায়। এখানে কিভাবে:

  1. RBENV_VERSION পরিবেশ পরিবর্তনশীল সেট করা থাকলে, তার মানটি রবি ব্যবহারের সংস্করণ নির্ধারণ করে।
  2. বর্তমান ওয়ার্কিং ডিরেক্টরীতে .rbenv-version ফাইল থাকলে, তার সামগ্রীগুলি RBENV_VERSION পরিবেশ পরিবর্তনশীল সেট করতে ব্যবহার করা হয়।
  3. বর্তমান ডিরেক্টরির মধ্যে .rbenv-version ফাইল নেই, .rbenv-version প্রতিটি parent ডিরেক্টরিটি .rbenv-version ফাইলের জন্য অনুসন্ধান করে না যতক্ষণ না এটি আপনার ফাইল সিস্টেমের রুট হিট করে। যদি কেউ পাওয়া যায়, তার সামগ্রী RBENV_VERSION পরিবেশ পরিবর্তনশীল সেট করতে ব্যবহার করা হয়।
  4. যদি RBENV_VERSION এখনও সেট না করা থাকে, তাহলে RBENV_VERSION ~/.rbenv/version ফাইলের সামগ্রী ব্যবহার করে এটি সেট করার চেষ্টা করে।
  5. যদি কোনও সংস্করণ যে কোন জায়গায় উল্লেখ না করা হয়, তবে rbenv অনুমান করে যে আপনি "সিস্টেম" রুবি ব্যবহার করতে চান-অর্থাত যদি আপনার রুবেনে Rbenv না থাকে তবে কোনও সংস্করণ চালানো হবে।

(আপনি .rbenv-version rbenv local কমান্ডের সাহায্যে একটি প্রকল্প-ভিত্তিক রুবি সংস্করণ সেট করতে পারেন, যা বর্তমান ডিরেক্টরির মধ্যে .rbenv-version ফাইল তৈরি করে। একইভাবে, ~/.rbenv/version rbenv global কমান্ড ~/.rbenv/version ফাইলটি সংশোধন করে।)

RBENV_VERSION এনভায়রনমেন্ট ভেরিয়েবলের সাথে সশস্ত্র, আপনার PATH এর সামনে ~/.rbenv/versions/$RBENV_VERSION/bin করে, তারপর কমান্ড এবং আর্গুমেন্ট rbenv exec প্রেরিত হয়। ভাল খবর!

হুডের অধীনে ঠিক কী ঘটেছে তার একটি পুঙ্খানুপুঙ্খ RBENV_DEBUG=1 , RBENV_DEBUG=1 সেট করার চেষ্টা করুন এবং রুবি কমান্ডটি চালান। Rbenv চালানোর প্রতিটি বাশ কমান্ড আপনার টার্মিনালে লেখা হবে।

এখন, Rbenv কেবল স্যুইচিং সংস্করণগুলির সাথে সংশ্লিষ্ট, তবে প্লাগিনগুলির একটি সমৃদ্ধ ইকোসিস্টেম আপনাকে রুবি ইনস্টল করতে, পরিবেশকে সেটআপ করতে , "জেমসেটস" পরিচালনার এবং এমনকি bundle exec ফিক্স স্বয়ংক্রিয়করণে সবকিছু করতে সহায়তা করবে।

আমি নিশ্চিত নই যে রুবি সংস্করণগুলি স্যুইচ করার সাথে আইআরসি সমর্থন কি করতে হবে, এবং rbenv সমর্থিত হওয়ার জন্য যথেষ্ট সহজ এবং বোধগম্য হতে ডিজাইন করা হয়েছে। কিন্তু আপনার কি কখনও সহায়তা দরকার, ইস্যু ট্র্যাকার এবং টুইটার মাত্র কয়েক ক্লিকে দূরে।

প্রকাশ: আমি rbenv, রুবি-বিল্ড, এবং rbenv-vars লেখক।


rvm system
env > before
rvm jruby # or whatever
env > after
diff after before

আপনি প্রায় প্রদান করে:

< GEM_HOME=$HOME/.gem/ruby/1.9.1
---
> GEM_HOME=$HOME/.rvm/gems/jruby-1.6.6
< GEM_PATH=$HOME/.gem/ruby/1.9.1
---
> GEM_PATH=$HOME/.rvm/gems/jruby-1.6.6:$HOME/.rvm/gems/jruby-1.6.[email protected]
*bunch of rvm_*
> MY_RUBY_HOME=$HOME/.rvm/rubies/jruby-1.6.6
> RUBY_VERSION=jruby-1.6.6
> IRBRC=$HOME/.rvm/rubies/jruby-1.6.6/.irbrc

এবং এটি prepends:

$HOME/.rvm/gems/jruby-1.6.6/bin:$HOME/.rvm/gems/jruby-1.6.[email protected]/bin

$PATH





rbenv