কম্পিউটার

রুবি জেমস, জেমফাইল এবং বান্ডলার (দ্য আলটিমেট গাইড)

একটি রুবি রত্ন কি?

একটি রত্ন হল একটি প্যাকেজ যা আপনি ডাউনলোড এবং ইনস্টল করতে পারেন৷ আপনার যখন একটি ইনস্টল করা রত্ন প্রয়োজন তখন আপনি আপনার রুবি প্রোগ্রামে অতিরিক্ত কার্যকারিতা যোগ করছেন৷

রত্ন আপনাকে অনুমতি দেয় :

  • আপনার Rails অ্যাপে একটি লগইন বৈশিষ্ট্য যোগ করুন
  • বাহ্যিক পরিষেবাগুলির সাথে সহজে কাজ করুন (যেমন API)
  • একটি ওয়েব অ্যাপ্লিকেশন তৈরি করুন

এটা শুধু কিছু উদাহরণ। প্রতিটি রত্ন এর নিজস্ব লক্ষ্য আছে।

কেন আমরা রত্ন ব্যবহার করি?

  • রুবিতে আমরা এভাবেই লাইব্রেরি এবং টুল শেয়ার করি
  • একটি মণির ফাইলের গঠন এবং বিন্যাস এটি কিভাবে কাজ করে তা বোঝা সহজ করে তোলে
  • একটি স্পেসিফিকেশন (“.spec”) ফাইল যা প্রতিটি মণির সাথে আসে নির্ভরতা (অন্যান্য প্রয়োজনীয় রত্ন) বর্ণনা করে তাই কোডটিতে কাজ করার জন্য প্রয়োজনীয় সবকিছু রয়েছে

RubyGems কে ধন্যবাদ, আমাদের কাছে সহায়ক লাইব্রেরির সমৃদ্ধ ইকোসিস্টেম আছে শুধুমাত্র একটি gem install দূরে!

একটি প্রদত্ত (অ-রত্ন) প্রকল্পের জন্য প্রয়োজনীয় রত্নগুলির একটি তালিকা "জেমফাইল" নামক একটি বিশেষ ফাইলে তালিকাভুক্ত করা যেতে পারে যাতে সেগুলি বান্ডলার দ্বারা স্বয়ংক্রিয়ভাবে ইনস্টল করা যায়। উভয়ই এই গাইডে পরে কভার করা হয়েছে৷

রত্নগুলির কিছু উদাহরণ কি?

  • রেল, এবং এর সমস্ত উপাদান (ActiveRecord, ActiveSupport, ইত্যাদি) রুবি রত্ন হিসাবে বিতরণ করা হয়
  • প্রাই, irb-এর শক্তিশালী বিকল্প
  • নোকোগিরি, একটি জনপ্রিয় XML এবং HTML পার্সার

বেশিরভাগ রত্ন বিশুদ্ধ রুবি কোড।

কিছু রত্ন উন্নত কর্মক্ষমতা জন্য একটি রুবি সি এক্সটেনশন অন্তর্ভুক্ত.

আপনি যখন রত্নটি ইনস্টল করেন তখন এই এক্সটেনশনটি স্বয়ংক্রিয়ভাবে আপনার জন্য তৈরি হয়৷ কিছু ক্ষেত্রে, আপনাকে ম্যানুয়ালি অতিরিক্ত সফ্টওয়্যার ইনস্টল করতে হতে পারে যা RubyGems দ্বারা পরিচালিত হয় না৷

এখন :

আসুন আপনার নিজের তৈরি করে এবং রত্ন তৈরি করে এমন ফাইলগুলি দেখে রত্ন সম্পর্কে আরও শিখি৷

কিভাবে একটি রুবিগেম তৈরি করবেন

আপনি bundle gem <name> চালিয়ে একটি নতুন রত্নটির জন্য ফাইলগুলি প্রস্তুত করতে পারেন৷ .

উদাহরণস্বরূপ :

bundle gem awesome_gem

একটি রত্ন নিম্নলিখিত কাঠামোর সমন্বয়ে গঠিত :

├── awesome_gem.gemspec
├── bin
│   ├── console
│   └── setup
├── Gemfile
├── lib
│   ├── awesome_gem
│   │   └── version.rb
│   └── awesome_gem.rb
├── Rakefile
├── README.md
└── test
    ├── awesome_gem_test.rb
    └── test_helper.rb

এই .gemspec ফাইল হল যেখানে আপনি রত্ন সম্পর্কে সমস্ত তথ্য পাবেন .

এর মধ্যে রয়েছে :

  • রত্ন নাম
  • রত্ন সারাংশ (সংক্ষিপ্ত বিবরণ)
  • লেখকের নাম
  • নির্ভরতার তালিকা
  • মণির মধ্যে অন্তর্ভুক্ত করার জন্য ফাইলগুলির একটি তালিকা
  • ঐচ্ছিক:লেখকের ইমেল ঠিকানা, প্রকল্প URL (হোমপেজ), এক্সিকিউটেবল, সি এক্সটেনশন, দীর্ঘ বিবরণ।

রত্ন সংস্করণ নিজেই lib/<gem_name>/version.rb এ একটি ধ্রুবক হিসাবে সংজ্ঞায়িত করা হয়েছে .

এখানে একটি উদাহরন রত্ন চিহ্ন :

Gem::Specification.new do |spec|
  spec.name          = "awesome_gem"
  spec.version       = AwesomeGem::VERSION
  spec.authors       = ["Jesus Castello"]
  spec.summary       = "Example gem for article about Ruby gems"

  spec.files         = Dir['**/**'].grep_v(/.gem$/)

  spec.require_paths = ["lib"]

  spec.add_development_dependency "bundler", "~> 1.16"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "minitest", "~> 5.0"
end

require_paths অ্যারে যেখানে আপনার প্রয়োজন হলে রুবি আপনার রত্ন ফাইলগুলি সন্ধান করবে। এটি আপনাকে lib/<gem_name>/ এর অধীনে আপনার কোড রাখতে দেয় এবং তারপর require "<gem_name>/<file_name>" এর সাথে প্রয়োজন .

উদাহরণস্বরূপ :

lib/awesome_gem/parser.rb নামের একটি ফাইল require "awesome_gem/parser" প্রয়োজন হিসাবে প্রয়োজন হবে৷ মণির ভিতর যে কোন জায়গা থেকে।

lib/<gem_name>.rb-এ আপনার বেশিরভাগ চাহিদা থাকবে (/lib এর রুটে একমাত্র ফাইল )।

এটি সেই ফাইল যা আপনার require হলে লোড হয় মণি!

পরবর্তী :

add_development_dependency লাইনগুলি রত্নগুলিকে সংজ্ঞায়িত করে যা আপনি বিকাশের সময় ব্যবহার করতে যাচ্ছেন৷

এগুলি হল মিনিটেস্ট, আরএসপেক বা প্রি-এর মতো রত্ন৷

যখন add_dependency আপনি আপনার কোডের অংশ হিসাবে ব্যবহার করেন এমন রত্নগুলিকে সংজ্ঞায়িত করে৷

একবার আপনি ডিফল্ট মান থেকে সারাংশ এবং বিবরণ পরিবর্তন করে ফেললে... আপনি bin/console ব্যবহার করে আপনার মণির সাথে একটি irb সেশন লোড করতে পারবেন প্রোগ্রাম যা bundle gem আপনার জন্য তৈরি করে।

উদাহরণ :

$ bin/console

irb(main):001:0>
irb(main):002:0>
irb(main):003:0> AwesomeGem
=> AwesomeGem
irb(main):004:0>
irb(main):005:0> AwesomeGem::VERSION
=> "0.1.0"

তারপর আপনি gem build <name>.gemspec ব্যবহার করে রত্নটি প্যাকেজ করতে পারেন &gem push ব্যবহার করে rubygems.org-এ প্রকাশ করুন .

বান্ডলার কি?

রুবি রত্ন সম্পর্কে শেখার সময় আপনি বান্ডলার সম্পর্কেও পড়তে পারেন .

কিন্তু বান্ডলার ঠিক কী?

বান্ডলার হল নির্ভরতা ব্যবস্থাপনার একটি টুল .

RubyGems ইতিমধ্যে এটি পরিচালনা করেনি?

ঠিক আছে, এটা করে... কিন্তু শুধুমাত্র রত্নদের জন্যই .

আপনার নিয়মিত রুবি অ্যাপ্লিকেশনটি একটি রত্ন হিসাবে তৈরি করা হয়নি, তাই এটি এই বৈশিষ্ট্যটি পায় না৷

এই কারণেই বান্ডলার বিদ্যমান!

জেমফাইল বোঝা

আপনি কি সেই Gemfile দেখেছেন ফাইল?

এখানেই আপনি আপনার রুবি অ্যাপ্লিকেশন এর জন্য কোন রত্ন ব্যবহার করতে চান তা লিখুন .

এই রত্নগুলি আপনার জন্য require ছাড়াই লোড করা হবে৷ তাদের।

একটি জেমফাইল এইরকম দেখায়৷ :

ruby '2.5.0'

gem 'rails', '~> 5.2.1'
gem 'sqlite3'
gem 'puma', '~> 3.11'
gem 'bootsnap', '>= 1.1.0', require: false

বান্ডলার (এবং সংস্করণ 2.0 থেকে RubyGems) এই ফাইলটি পড়তে পারে এবং এই রত্নগুলির অনুরোধ করা সংস্করণগুলি ইনস্টল করতে পারে৷

bundle install চালানোর সময় আপনার এটিই দেখা উচিত কমান্ড:

Using turbolinks-source 5.1.0
Using turbolinks 5.1.1
Using uglifier 4.1.18
Using web-console 3.6.2

Bundle complete! 18 Gemfile dependencies, 78 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

এখন :

এই চিহ্নগুলি কী (যেমন ~> ) আপনার জেমফাইলের প্রতিটি মণির জন্য সংস্করণ ঘোষণা করার সময় ব্যবহৃত হয়?

এগুলি আপনাকে সংস্করণের একটি পরিসর অনুরোধ করার অনুমতি দেয়৷ .

আপনি বলতে পারেন, "আমি চাই যে সংস্করণটি 1.2 এর সমান বা বড় হোক, কিন্তু 2.0-এর চেয়ে কম"।

যা দেখতে এইরকম হবে:

gem 'puma', '~> 1.2'

~> হল এই পরিসরের জন্য একটি শর্টকাট :

gem 'puma', '>= 1.2', '< 2.0'

~> 5.2.1 এর ক্ষেত্রে , এর মানে ঠিক এটিই :

'>= 5.2.1', '< 5.3'

সংস্করণ সংখ্যা যত বেশি নির্দিষ্ট হবে সংস্করণের পরিসর তত বেশি সীমাবদ্ধ হবে।

Gemfile অপশন এবং Gemfile.lock

একটি জেমফাইলের ভিতরে একটি রত্ন প্রয়োজন হলে আপনার কাছে কয়েকটি বিকল্প রয়েছে৷

উদাহরণস্বরূপ :

আপনি গিটহাবের মত একটি ভিন্ন উৎস থেকে একটি রত্ন টানতে চাইতে পারেন।

এটি যখন আপনার প্রজেক্টের সর্বশেষ সংস্করণ ব্যবহার করার প্রয়োজন হয় তখন সহায়ক হয়৷ , এমনকি যদি এটি এখনও rubygems.org-এ প্রকাশিত না হয়।

এখানে একটি উদাহরণ:

gem "rails", git: "git@github.com:rails/rails.git"

আপনি একটি branch পাস করতে পারেন একটি শাখা থেকে কোড ব্যবহার করার বিকল্প যা মাস্টার নয়।

এরকম :

gem "awesome_print", git: "git@github.com:awesome-print/awesome_print.git", branch: "v2"

আরেকটি বিকল্প আপনি খুঁজে পেতে পারেন তা হল require: false .

এটা কি করে?

এটি বান্ডলারকে বলে যে আপনার জন্য রত্নটি স্বয়ংক্রিয়ভাবে প্রয়োজন হবে না। এর মানে হল যে আপনাকে require করতে হবে এটি আপনার কোডে যখন আপনার প্রয়োজন হয়৷

এটি রত্নগুলির জন্য ব্যবহৃত হয় যেগুলির সুযোগ সীমিত৷

উদাহরণস্বরূপ :

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

এছাড়াও আপনি পরিবেশ অনুসারে রত্নগুলিকে গ্রুপ করতে পারেন৷ .

এর মানে আপনার কাছে এমন রত্ন থাকতে পারে যা শুধুমাত্র ইনস্টল করা এবং বিকাশে লোড করা হয় (যেমন capybara &pry )।

অবশেষে, বান্ডলার একটি Gemfile.lock তৈরি করে .

পার্থক্য কি?

একটি Gemfile.lock স্বয়ংক্রিয়ভাবে তৈরি হয় এবং এটি বলে প্রতিটি রত্নটির ঠিক কোন সংস্করণগুলি ইনস্টল করা হয়েছিল৷ .

Bundler এই সংস্করণগুলি ইনস্টল করবে যাতে আপনি যখন এই অ্যাপ্লিকেশনটিকে উৎপাদনে স্থাপন করেন, বা অন্যান্য বিকাশকারীদের সাথে আপনার প্রকল্পটি ভাগ করেন, তখন প্রত্যেকে একই ধরনের রত্নগুলির সাথে কাজ করবে৷

উপযোগী রত্ন এবং বান্ডলার কমান্ড

৷ ৷ ৷
কমান্ড বর্ণনা
রত্ন তালিকা আপনার ইনস্টল করা সমস্ত রত্ন তালিকাভুক্ত করুন৷ নাম অনুসারে রত্ন ফিল্টার করার জন্য একটি যুক্তি স্বীকার করে (উদাহরণ:gem list active )
মণি যা আপনাকে সেই পথ দেয় যেখানে একটি রত্ন ইনস্টল করা হয়৷
মণি অনুসন্ধান কনফিগার করা উৎস থেকে রত্ন খুঁজুন (ডিফল্ট:rubygems.org)। একটি নিয়মিত অভিব্যক্তি নেয় (উদাহরণ:gem search "\Aawesome_" )।
মণি env আপনার রত্ন পরিবেশ (সংস্করণ, পথ, কনফিগারেশন) সম্পর্কে তথ্য প্রদর্শন করে।
মণি ইনস্টল -v আপনাকে একটি নির্দিষ্ট রত্ন সংস্করণ ইনস্টল করার অনুমতি দেয় (উদাহরণ:gem install sinatra -v 2.0.0 )।
বান্ডেল যেমন আপনার বর্তমান প্রকল্পের জন্য নির্ভরতা গ্রাফের একটি ভিজ্যুয়ালাইজেশন তৈরি করে৷
বান্ডেল শো বান্ডলারের মাধ্যমে ইনস্টল করা একটি নির্দিষ্ট রত্ন সম্পর্কে তথ্য দেখায়৷ একটি Gemfile সহ একটি ফোল্ডারের ভিতরে থাকতে হবে৷
বান্ডেল পুরানোবর্তমান প্রকল্পে পুরানো রত্নগুলির একটি তালিকা প্রদর্শন করে৷ --groups ব্যবহার করতে পারেন তাদের গ্রুপ করার বিকল্প।
বান্ডেল কনসোল বর্তমান প্রকল্পের Gemfile থেকে রত্নগুলির সাথে একটি irb সেশন চালায়৷

সারাংশ

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

আমি আশা করি আপনি এটি দরকারী খুঁজে পেয়েছেন!

অনুগ্রহ করে এই নিবন্ধটি শেয়ার করুন, নিউজলেটার সাবস্ক্রাইব করুন যদি আপনি এখনও (9000+ রুবি বিকাশকারী!) না করে থাকেন এবং আমার রুবি বইটি দেখুন৷

পড়ার জন্য ধন্যবাদ এবং আপনার দিনটি ভালো কাটুক 🙂


  1. Windows 10 কীবোর্ড শর্টকাট:The Ultimate Guide

  2. ইনপুট ও আউটপুট (IO) রুবিতে:দ্য ডেফিনিটিভ গাইড

  3. রুবি বিকাশকারীদের জন্য সময় জটিলতার নির্দিষ্ট গাইড

  4. ম্যাকে অ্যান্ড্রয়েড বার্তাগুলির জন্য চূড়ান্ত গাইড