জেমফিল.লক ফাইলটি বোঝা


181

bundle installকমান্ডটি চালানোর পরে ওয়ার্কিং ডিরেক্টরিতে 'জেমফিল.লক ' তৈরি হয়। এই ফাইলের অভ্যন্তরে যে নির্দেশনা রয়েছে তার অর্থ কী?

উদাহরণস্বরূপ, আসুন নিম্নলিখিত ফাইলটি নেওয়া যাক:

PATH
  remote: .
  specs:
    gem_one (0.0.1)

GEM
  remote: http://example.org/
  specs:
    gem_two (0.0.2)
    gem_three (0.0.3)
      gem_four (0.0.4)

PLATFORMS
  platform

DEPENDENCIES
  gem_two
  gem_one!

' পাঠ ', ' জেইএম ', ' প্ল্যাটফর্ম ' এবং ' বিবরণী ' কী বর্ণনা করে? তাদের সব কি প্রয়োজন?

' রিমোট ' এবং ' চশমা ' উপ- নির্দেশিকা কী থাকতে হবে ?

' DEPendENCIES ' গ্রুপে রত্ন নামটির পরে উদ্দীপনা চিহ্নটির অর্থ কী?

উত্তর:


71

আপনি এটি সম্পর্কে বান্ডিলারের ওয়েবসাইটে আরও জানতে পারেন (আপনার সুবিধার জন্য নীচে জোর দেওয়া হয়েছে):

কিছুক্ষণ আপনার অ্যাপ্লিকেশনটি বিকাশের পরে, জেমফিল এবং জেমফিল.লোক স্ন্যাপশটের সাথে একসাথে অ্যাপ্লিকেশনটি চেক করুন । এখন, আপনার সংগ্রহস্থলে অ্যাপ্লিকেশনটি নিশ্চিতভাবে নিশ্চিত হয়েছিল যে আপনি শেষ সময় ব্যবহার করেছিলেন এমন সমস্ত রত্নগুলির সঠিক সংস্করণগুলির রেকর্ড রয়েছে has

এটি গুরুত্বপূর্ণ: জেমফিল.লক আপনার অ্যাপ্লিকেশনটিকে আপনার নিজস্ব কোড এবং তৃতীয় পক্ষের কোড উভয়ের একক প্যাকেজ করে তোলে যা আপনি সর্বশেষে নিশ্চিতভাবেই জেনে গেছেন যে আপনি শেষবারের মতো কাজ করেছেন তা নিশ্চিতভাবেই জানেন। তৃতীয় পক্ষের কোডের সঠিক সংস্করণগুলি নির্দিষ্ট করে আপনি আপনার জেমফাইলে নির্ভর করেন যা একই গ্যারান্টি সরবরাহ করে না, কারণ রত্নগুলি সাধারণত তাদের নির্ভরতার জন্য বিভিন্ন ধরণের সংস্করণ ঘোষণা করে।


65
এটি তার কোনও প্রশ্নের উত্তর দেয়নি, তিনি জেমফিল.লকের ফর্ম্যাট সম্পর্কে জিজ্ঞাসা করছেন, তবে এটি এটি কী করে তা বর্ণনা করে।
জোশুয়া গাল

38

বিস্ময়বোধক চিহ্নের বিষয়ে আমি সবেমাত্র জানতে পেরেছিলাম যে এটি রত্নগুলির মাধ্যমে পাওয়া গেছে :git, যেমন

gem "foo", :git => "git@github.com:company/foo.git"

বাহ, খুব সুন্দর কাজটি বুঝতে পেরে, আমি এটিও ভাবছি। ধন্যবাদ।
জেপি সিলভাশি

5
pathবিকল্পের মাধ্যমে স্থানীয় রত্নগুলি লোড করার সময় এটিও ঘটে । আমি অনুমান করছি যে এটি কোনও সংকলিত রত্ন লোড করার সাথে কিছু করার আছে?
জাইকাডেলিক

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

35

আমি গত কয়েক মাস জেমফাইলস এবং জেমফিলের সাথে জগাখিচুড়ি করে কাটিয়েছি an একটি স্বয়ংক্রিয় নির্ভরতা আপডেট সরঞ্জাম 1 নির্মাণের সময় অনেকটা লক করে । নীচেরটি চূড়ান্ত থেকে অনেক দূরে, তবে এটি জেমফিল.লক ফর্ম্যাটটি বোঝার জন্য একটি ভাল সূচনা পয়েন্ট। আপনি বান্ডলারের লকফিল পার্সারটির উত্স কোডটিও দেখতে চাইতে পারেন ।

আপনি বান্ডলার 1.x দ্বারা উত্পাদিত একটি লকফাইলে নিম্নলিখিত শিরোনামগুলি পাবেন:

জেম (but চ্ছিক তবে খুব সাধারণ)

এগুলি রুবিজেমস সার্ভার থেকে প্রাপ্ত নির্ভরতা। এটি রুবিজেমস.আরগজে মূল রুবিজেমস সূচক হতে পারে, বা এটি একটি কাস্টম সূচক হতে পারে যেমন জেমফুরি এবং অন্যদের থেকে উপলব্ধ। এই বিভাগের মধ্যে আপনি দেখতে পাবেন:

  • remote: রুবিজেমস সূচকের অবস্থান নির্দিষ্ট করে এক বা একাধিক লাইন
  • specs: নির্ভরতাগুলির একটি তালিকা, তাদের সংস্করণ নম্বর এবং কোনও উপ-নির্ভরতার উপর বাধা

জিআইটি ( alচ্ছিক )

এগুলি প্রদত্ত গিট রিমোট থেকে উত্পন্ন নির্ভরতা। প্রতিটি গিট রিমোটের জন্য আপনি এই বিভাগগুলির একটি আলাদা দেখতে পাবেন এবং প্রতিটি বিভাগের মধ্যে আপনি দেখতে পাবেন:

  • remote:গিট রিমোট যেমন,git@github.com:rails/rails
  • revision: কমিট রেফারেন্সটি জেমফিল.লক লক করা আছে
  • tag: (alচ্ছিক) জেমফাইলে উল্লিখিত ট্যাগ
  • specs: গিটার নির্ভরতা এই দূরবর্তীটিতে পাওয়া গেছে, এর সংস্করণ নম্বর এবং কোনও উপ-নির্ভরতাতে সীমাবদ্ধতা রয়েছে

পথ ( alচ্ছিক )

এগুলি pathহ'ল জেমফাইলে প্রদত্ত প্রদত্ত থেকে নির্ভরতা । প্রতিটি পথ নির্ভরতার জন্য আপনি এই বিভাগগুলির একটি আলাদা দেখতে পাবেন এবং প্রতিটি বিভাগের মধ্যে আপনি দেখতে পাবেন:

  • remote:পথ. যেমন,plugins/vendored-dependency
  • specs: গিটার নির্ভরতা এই দূরবর্তীটিতে পাওয়া গেছে, এর সংস্করণ নম্বর এবং কোনও উপ-নির্ভরতাতে সীমাবদ্ধতা রয়েছে

PLATFORMS এ

রুবি প্ল্যাটফর্মটি জেমফিল.লক বিপরীতে তৈরি হয়েছিল। গেমফিলের কোনও নির্ভরতা যদি কোনও প্ল্যাটফর্ম নির্দিষ্ট করে তবে লকফিলটি যখন প্ল্যাটফর্মটিতে উত্পন্ন হয় (যেমন, একটি ইনস্টলের মাধ্যমে) তখন সেগুলি কেবল জেমফিলের অন্তর্ভুক্ত হবে।

নির্ভরতা

Gemfileসেখানে উল্লিখিত সংস্করণ সীমাবদ্ধতার সাথে নির্ভর করে যা নির্ভরতাগুলির একটি তালিকা ।

মূল রুবিজেমস সূচক ছাড়া অন্য কোনও উত্সের সাথে নির্দিষ্ট করা নির্ভরতাগুলির (যেমন, গিট নির্ভরতা, পথ-ভিত্তিক, নির্ভরতা) এর একটি !অর্থ যার অর্থ তারা সেই উত্স 2 এ "পিনড" হয়ে গেছে (যদিও এটি নির্ধারণের জন্য কখনও কখনও জেমফাইলে দেখতে হবে)।

রুবি সংস্করণ ( alচ্ছিক )

এই জেমফিল.লকটি তৈরি করা হলে, রুবি সংস্করণ জেমফাইলে নির্দিষ্ট করা হয়েছে। .ruby_versionপরিবর্তে যদি কোনও ফাইলের মধ্যে রুবি সংস্করণ নির্দিষ্ট করা থাকে তবে এই বিভাগটি উপস্থিত থাকবে না (যেহেতু বান্ডলারটি ইনস্টলারের রুবি সংস্করণে জেমফিল / জেমফিল.লক অজন্যস্টিক বিবেচনা করবে)।

সঙ্গে বানানো(বান্ডলার> = v1.10.x) এর বানানো

বান্ডলারের সংস্করণ জেমফিল.লক তৈরি করতে ব্যবহৃত হয়েছিল। ইনস্টলকারীদের তাদের বান্ডলারের সংস্করণ আপডেট করতে স্মরণ করিয়ে দেওয়ার জন্য ব্যবহৃত হয়, যদি ফাইলটি তৈরি করা সংস্করণটির চেয়ে এটি পুরানো হয়।

প্লাগইন উত্স ( এবং খুব বিরল)

তত্ত্ব অনুসারে, একটি রত্ন পাখি বান্ডিলার প্লাগইনগুলি এবং সেইসাথে 3 রত্নগুলি নির্দিষ্ট করতে পারে যা পরে এখানে তালিকাভুক্ত করা হবে। অনুশীলনে, আমি জুলাই 2017 পর্যন্ত কোনও উপলব্ধ প্লাগইন সম্পর্কে সচেতন নই B বান্ডলারের এই অংশটি এখনও সক্রিয় বিকাশের অধীনে রয়েছে!


  1. https://dependabot.com
  2. https://github.com/bundler/bundler/issues/4631
  3. http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/

2
সেরা উত্তর বলে মনে হচ্ছে
15-10

9

বান্ডলার হ'ল এক রত্ন পরিচালক যা রবি প্রকল্পগুলির জন্য প্রয়োজনীয় রত্ন এবং সংস্করণগুলি প্রয়োজনীয় ট্র্যাকিং এবং ইনস্টল করে একটি সামঞ্জস্যপূর্ণ পরিবেশ সরবরাহ করে।

জেমফাইল এবং জেমফিল.লক হ'ল প্রাথমিক পণ্য যা বান্ডলার রত্ন দ্বারা সরবরাহ করা হয় (বান্ডলার নিজেই একটি রত্ন)।

জেমফাইলে মণি (গুলি) এর উপর আপনার প্রকল্প নির্ভরতা থাকে যা আপনি ম্যানুয়ালি উল্লিখিত সংস্করণ (গুলি) সহ উল্লেখ করেন তবে সেই মণি (গুলি) অন্যান্য রত্নগুলির উপর নির্ভর করে যা বান্ডলার দ্বারা স্বয়ংক্রিয়ভাবে সমাধান করা হয় is

জেমফিল.লোক জেমফিলের সাথে সম্পর্কিত নির্ভরতার সাথে সমস্ত রত্নের সম্পূর্ণ স্ন্যাপশট ধারণ করে।

আপনি যখন প্রথম বান্ডিল ইনস্টল কল করবেন, এটি এই জেমফিল.লকটি তৈরি করবে এবং বান্ডিল ইনস্টল করতে পরবর্তী সমস্ত কলগুলিতে এই ফাইলটি ব্যবহার করবে, যা নিশ্চিত করে যে আপনার সমস্ত নির্ভরতা ইনস্টল করা আছে এবং নির্ভরতা ইনস্টলেশনটি এড়িয়ে যাবে।

আপনি বিভিন্ন মেশিনের সাথে আপনার কোড ভাগ করে নেওয়ার সময় একই ঘটে

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

কেন আমাদের একাধিক মেশিনের সাথে ধারাবাহিকতা বজায় রাখতে হবে?

  • বিভিন্ন মেশিনে বিভিন্ন সংস্করণ চালানো ভাঙ্গা কোডের দিকে নিয়ে যেতে পারে

  • মনে করুন, আপনার অ্যাপটি 1.5.3 সংস্করণটি ব্যবহার করেছে এবং এটি 14 মাস আগে
    কোনও সমস্যা ছাড়াই কাজ করে এবং আপনি
    জেমফাইল ছাড়াই বিভিন্ন মেশিনে ইনস্টল করার চেষ্টা করেন। এখন আপনি সংস্করণটি 1.5.8 পেয়ে যাবেন get সম্ভবত এটি কিছু মণি (গুলি) এর সর্বশেষতম সংস্করণ সহ ভেঙে গেছে এবং আপনার অ্যাপ্লিকেশন
    ব্যর্থ হবে । ধারাবাহিকতা বজায় রাখা সর্বাধিক গুরুত্ব দেয় (পছন্দের
    অনুশীলন)।

বান্ডেল আপডেট ব্যবহার করে জেমফিল.লকে জহর (গুলি) আপডেট করাও সম্ভব ।

এটি রক্ষণশীল আপডেট করার ধারণার ভিত্তিতে তৈরি


8

এটি আমার কাছে দেখে মনে হচ্ছে যেমন প্যাথএইচটি আপনার জেমস্পেক থেকে সরাসরি প্রথম-প্রজন্মের নির্ভরতা তালিকাভুক্ত করে, যেখানে জিইএম দ্বিতীয়-প্রজন্মের নির্ভরতা (যেমন আপনার নির্ভরতাগুলির উপর নির্ভর করে) এবং আপনার জেমফাইলে থেকে তালিকাবদ্ধ করে। PATH :: দূরবর্তী হ'ল .কারণ এটি PATH :: স্পেসের মধ্যে কী রয়েছে তা অনুসন্ধানের জন্য বর্তমান ডিরেক্টরিতে একটি স্থানীয় রত্নপণেকের উপর নির্ভর করে, যদিও জিম :: দূরবর্তী, যেহেতু এটি জিমের মধ্যে রয়েছে rubygems.orgতার সন্ধান করার জন্য সেখানে যেতে হয়েছিল: বৈশিষ্ট।

একটি রেল প্লাগইনে, আপনি একটি PATH বিভাগ দেখতে পাবেন, কিন্তু একটি রেল অ্যাপ্লিকেশনটিতে নেই। যেহেতু অ্যাপ্লিকেশনটিতে একটি রত্নমুক্ত ফাইল নেই, তাই PATH- তে রাখার মতো কিছুই থাকবে না।

ডেপেন্ডেনসিআইএস হিসাবে, জেমবন্ডার ডট কম বলেছেন:

Runtime dependencies in your gemspec are treated like base dependencies, 
and development dependencies are added by default to the group, :development

উত্পন্ন জেমফাইল rails plugin new my_pluginঅনুরূপ কিছু বলে:

# Bundler will treat runtime dependencies like base dependencies, and
# development dependencies will be added by default to the :development group.

এর অর্থ কী এটির মধ্যে পার্থক্য

s.add_development_dependency "july" # (1)

এবং

s.add_dependency "july" # (2)

এটি হ'ল (1) কোনও উন্নয়ন পরিবেশে জেমফিল.লক (এবং তাই প্রয়োগে) কেবল "জুলাই" অন্তর্ভুক্ত করবে। সুতরাং যখন আপনি দৌড়ান bundle install, আপনি "জুলাই" দেখতে পাথের অধীনে নয় কেবল ডিপেন্ডেন্সির অধীনেও কেবলমাত্র বিকাশে পাবেন। উত্পাদনে, এটি মোটেও হবে না। যাইহোক, আপনি যখন (2) ব্যবহার করবেন, আপনি কেবল "পাত্রে" জুলাই "দেখবেন, ডিপেন্ডেন্সিতে নয়, তবে এটি যখন আপনি bundle installকোনও পরিবেশের পরিবেশ থেকে দেখবেন (অর্থাত্ কোনও অন্য রত্ন যাতে আপনাকে নির্ভরতা হিসাবে অন্তর্ভুক্ত করে) নয়, শুধুমাত্র উন্নয়ন।

এগুলি কেবল আমার পর্যবেক্ষণ এবং এর কোনওটি কেন এমন হয় তা আমি সম্পূর্ণরূপে ব্যাখ্যা করতে পারি না তবে আমি আরও মন্তব্যে স্বাগত জানাই।


3

এটি Gemfile.lockফর্ম্যাটে কোনও সুস্পষ্ট নথির কথা বলে মনে হচ্ছে না । এটি কেবল কারণ Gemfile.lockঅভ্যন্তরীণভাবে কেবল বান্ডিল দ্বারা ব্যবহৃত হয়।

যাইহোক, যেহেতু Gemfile.lockএকটি স্ন্যাপশট Gemfile, যার অর্থ এর সমস্ত তথ্য আসবে Gemfile(অথবা নির্দিষ্ট না থাকলে ডিফল্ট মান থেকে Gemfile)।

এর জন্য GEM, এটি আপনি সরাসরি বা অপ্রত্যক্ষভাবে প্রবর্তন করে এমন সমস্ত নির্ভরতা তালিকাভুক্ত করে Gemfileremoteঅধীনে GEMবলে যেখানে রত্ন, যার দ্বারা নির্দিষ্ট করা পেতে উৎস মধ্যে Gemfile

একটি মণি থেকে আনা না হয় তাহলে remote, PATHঅবস্থান সেটা খুঁজে পেতে বলে। PATHএর তথ্য থেকে আসে পাথ মধ্যে Gemfileযখন আপনি একটি নির্ভরতা ঘোষণা।

এবং এখানPLATFORM থেকে ।

এর জন্য DEPENDENCIES, এটি নির্ভরতার স্ন্যাপশটটি বান্ডিল দ্বারা সমাধান করা হয়েছে।


0

'DEPendECIES' গ্রুপে রত্ন নামটির পরে উদ্দীপনা চিহ্নটির অর্থ কী?

" Https://rubygems.org " ব্যতীত অন্য কোনও উত্স ব্যবহার করে রত্নটি ইনস্টল করা হলে বিস্ময়কর চিহ্নটি উপস্থিত হয় ।

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