জিলফিল এবং জেলফিলের মধ্যে পার্থক্য কি আছে?


125

আমি রেলের উপর রুবীর একজন শিক্ষানবিস এবং আমি রেলগুলি 3.0.9 ব্যবহার করছি।

মধ্যে পার্থক্য কি Gemfileএবং Gemfile.lockপাগল কেন?

উত্তর:


159

Gemfileযেখানে আপনি যা রত্ন আপনি ব্যবহার করতে চান উল্লেখ, এবং আপনি যা সংস্করণ উল্লেখ করতে দেয়।

Gemfile.lockফাইল যেখানে Bundler সঠিক সংস্করণ ইনস্টল করা রেকর্ড হয়। এই ভাবে, যখন একই লাইব্রেরি / প্রকল্পের অন্য মেশিনে লোড হয়, দৌড়ানো bundle installতাকান হবে Gemfile.lockবরং ব্যবহার না করে এবং সঠিক একই সংস্করণ ইনস্টল করুন, Gemfileএবং অতি সাম্প্রতিক সংস্করণটি ইনস্টল। (বিভিন্ন মেশিনে বিভিন্ন সংস্করণ চালানো ভাঙ্গা পরীক্ষা ইত্যাদি হতে পারে lead) আপনাকে কখনও লক ফাইলটি সরাসরি সম্পাদনা করতে হবে না।

বান্ডলারের উদ্দেশ্য এবং যুক্তি দেখুন , বিশেষত সংস্করণ নিয়ন্ত্রণ বিভাগে আপনার কোডটি পরীক্ষা করা হচ্ছে।


2
এটি কীভাবে কাজ করা উচিত - তবে স্পষ্টতই Gemfile.lockকিছু ক্ষেত্রে (যেমন rails (4.0.0)প্রয়োজন bundler (>= 1.3.0, < 2.0)) 'ওপেন' সংস্করণ অন্তর্ভুক্ত রয়েছে , যা সমস্যা সৃষ্টি করে। কীভাবে এই 'উন্মুক্ত' নির্ভরতা এড়ানো যায় কোনও ধারণা?
গিলারমো গ্রু

158

সাধারণত আমরা জেমফাইলে নির্ভরতা লিখি:

gem "nokogiri", "~> 1.4.4"
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'uglifier', '>= 1.2.3'
..

এখানে আপনি মূলত বলি: " আমি nokogiri চান হিসাবে দীর্ঘ সংস্করণ 1.4.4 তুলনায় এটি এর বৃহত্তর যেমন ", ইত্যাদি এখন অনুমান করা যে আমি আমার স্থাপন করেছি Gemfile 8 মাস আগে এবং এই প্রয়োজনের সাথে আমি সফল সেটআপ আমার অ্যাপ্লিকেশান। 8 মাস আগে নোকোগির সংস্করণ ছিল 1.4.4 । আমার রেল অ্যাপস এই সংস্করণটিতে কোনও সমস্যা ছাড়াই নিখুঁতভাবে চলছিল।

এখন ভাবুন আমিও এটি দিয়ে তৈরি করার চেষ্টা করছি Gemfile। তবে আমরা যদি নোকোগিরি সংস্করণগুলি দেখি তবে আমরা দেখতে পাব যে বর্তমান স্থিতিশীল সংস্করণটি 1.4.9 এ পরিবর্তিত হয়েছে । এর অর্থ যদি আমরা তৈরির চেষ্টা করি তবে বান্ডিলার নোকোগিরির 1.4.9 সংস্করণ ইনস্টল করবে (ধরুন আমাদের কাছে নেই Gemfile.lock)।

এর মানে কী ?

যেমন আপনি দেখতে পাচ্ছেন যে আপনার কোনও নেই Gemfile.lockএবং চালান:

bundle install

তবে বর্তমানে ব্যবহৃত রত্নগুলি যে কোনও সময় আলাদা হতে পারে । আপনার অ্যাপ্লিকেশনটি 1.4.4 সংস্করণটি ব্যবহার করেছে এবং এটি 8 মাস আগে কোনও সমস্যা ছাড়াই কাজ করে , তবে আপনি যদি এখন এটি তৈরির চেষ্টা করেন তবে আপনি সংস্করণটি 1.4.9 পাবেন । সম্ভবত এটি সর্বশেষতম সংস্করণটি সহ ভেঙে গেছে nokogiri, আপনি 1.4.4 এর সাথে যে দুর্দান্ত বৈশিষ্ট্যটি ব্যবহার করেছেন সেটি আরও উপলভ্য নয়, ইত্যাদি ..

এই ধরণের সমস্যা রোধ করতে Gemfile.lockব্যবহার করা হয়। ইন Gemfile.lockশুধুমাত্র সঠিক সংস্করণ লেখা হয়েছে এবং এর ফলে শুধুমাত্র এই ইনস্টল করা হবে। এর অর্থ আপনি যদি আপনার অ্যাপ্লিকেশনটি একটি দিয়ে বিতরণ করেন তবে Gemfile.lockপ্রতিটি মেশিনে একই রত্ন ইনস্টল করা হবে এবং সবচেয়ে গুরুত্বপূর্ণ তারা সকলেই একই সংস্করণ পাবেন । এটি আপনাকে একটি স্থিতিশীল এবং সাধারণ স্থাপনার স্ট্যাক দেবে।

জেমফাইল.লক তৈরি হয় কীভাবে?

এটি প্রথমটি দিয়ে স্বয়ংক্রিয়ভাবে তৈরি হয়:

bundle install

কমান্ড। এর পরে যতবার আপনি দৌড়াবেন bundle install, বান্ডিলটি প্রথমে সন্ধান করবে Gemfile.lockএবং সেখানে বর্ণিত রত্নগুলি ইনস্টল করবে। ধারাবাহিকতা এবং স্থিতিশীলতা সরবরাহ করার জন্য আপনার প্রকল্পগুলির মধ্যে এই ফাইলটি বিতরণ করা অভ্যাস।

জেমফাইল.লক আপডেট করবেন কীভাবে?

আপনি আপডেট করার চেয়ে আপনার অ্যাপ্লিকেশনগুলির সর্বশেষতম সংস্করণে খুশি হন Gemfile.lock। এতে আপনার পরিবর্তনগুলি প্রতিফলিত করুন Gemfile। তার মানে নির্ভরতাগুলিকে নতুন সঠিক সংস্করণগুলিতে পরিবর্তন করুন Gemfile। যে রান পরে:

bundle install

এটি আপনাকে Gemfile.lockঅ্যাপ্লিকেশনগুলির নতুন সংস্করণ সহ আপডেট করবে update


19
খুব সুন্দর, স্পষ্ট বর্ণনা (আমি ভোট দিয়েছি); তবে একটি নীটপিক, তবে: ইনস্টল করার nokogiri ~> 1.4.4অনুমতি দেয় না 1.5.3; সর্বাধিক অনুমোদিত 1.4.xযেখানে হবে x>=4(নোকোগিরির জন্য যে হবে 1.4.7)। ~>অপারেটর মানে শুধু শেষের ডিজিটটি ব্যবহৃত মণি দেওয়া সংস্করণ "তার চেয়ে অনেক বেশী" হতে পারে। উদাহরণস্বরূপ, এর foo ~> a.b.c.dঅর্থ যে কোনও সংস্করণ fooঠিক আছে যতক্ষণ না এটি এখনও অবাস্তব {কিছু} যেখানে {কিছু} >=ডি। আরও দেখুন এর সাথে সম্পর্কিত প্রশ্ন
মাইকেল

1
আমাকে বিভ্রান্ত করার বিষয়টি হ'ল আপনি ইতিমধ্যে gem "nokogiri", "~> 1.4.4"রত্নটি ব্যবহার করে নির্দিষ্ট সংস্করণ (গুলি) নির্দিষ্ট করছেন । কেন বান্ডলার কেবল সেই সংস্করণটি ব্যবহার করতে পারেনি? এটি কি কারণ এটি ইচ্ছাকৃতভাবে রত্নটির সর্বশেষতম সংস্করণগুলি ডিফল্টরূপে ইনস্টল করার জন্য তৈরি করা হয়েছে?
জনি

@ জনি, মাইকেল_এন এর মন্তব্য দেখুন। ~> 1.4.4 সঠিক সংস্করণ নির্দিষ্ট করে না।
ম্যাথু ফ্ল্যাশেন

2
@ জনি, ~> 1.4.4এর সমতুল্য >= 1.4.4 and < 1.5Bundler.io/v1.5/gemfile.html দেখুন । সঠিক সংস্করণের জন্য, কেবল ব্যবহার করুন gem 'foo', '1.4.4'
ম্যাথু ফ্ল্যাশেন

1
দুর্দান্ত উত্তর তবে দয়া করে " জেমফাইল.লক আপডেট করুন? " স্পষ্ট করুন : এই বিভাগটি কি বলছে যে সেখানে কোনও নতুন বিধিনিষেধ রয়েছে কিনা bundle installতা পরীক্ষা করে Gemfileদেখা হবে ? Gemfile.lockGemfile.lock
জেমেস

4

গেমফিল.লক

আপনি যখন বান্ডেল ইনস্টলটি চালান, তখন বান্ডিলার আপনার ব্যবহার করা সমস্ত রত্নের পুরো নাম এবং সংস্করণগুলি জেমফাইল.লক বলে একটি ফাইলের মধ্যে জেমফাইলে (5) নির্দিষ্ট রত্নগুলির নির্ভরতা সহ অবিরত থাকবে।

বান্ডলার ইনস্টল করতে বান্ডিল করার জন্য পরবর্তী সমস্ত কলগুলিতে এই ফাইলটি ব্যবহার করে, যা আপনার অ্যাপ্লিকেশন মেশিনগুলিতে সরে যাওয়ার পরেও আপনি সর্বদা একই সঠিক কোডটি ব্যবহার করার গ্যারান্টি দেয়।

যেহেতু নির্ভরতা রেজোলিউশনটি কাজ করে, এমনকি একটি আপাতদৃষ্টিতে সামান্য পরিবর্তন (উদাহরণস্বরূপ, আপনার জেমফাইলে (5%) রত্নের নির্ভরতার বিন্দু-প্রকাশের আপডেটের ফলে সমস্ত নির্ভরতা মেটাতে বিভিন্ন রত্নের আমূল পরিবর্তন হতে পারে।

ফলস্বরূপ, আপনি আপনার জেমফাইল পরীক্ষা করতে হবে version সংস্করণ নিয়ন্ত্রণে into যদি আপনি এটি না করেন, প্রতিটি মেশিন যা আপনার সংগ্রহস্থলটি পরীক্ষা করে (আপনার উত্পাদন সার্ভার সহ) আবার সমস্ত নির্ভরতা সমাধান করবে, এর ফলস্বরূপ তৃতীয় পক্ষের কোডের বিভিন্ন সংস্করণ ব্যবহার করা হবে যদি জেমফাইলে (5) রত্নগুলির মধ্যে কোনও হয় তাদের নির্ভরতা আপডেট করা হয়েছে।

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