อัญมณีทับทิมคืออะไร
อัญมณีเป็นแพ็คเกจที่คุณสามารถดาวน์โหลดและติดตั้งได้ เมื่อคุณต้องการอัญมณีที่ติดตั้ง คุณกำลังเพิ่มฟังก์ชันพิเศษให้กับโปรแกรม Ruby ของคุณ
อัญมณีช่วยให้คุณ :
- เพิ่มคุณสมบัติการเข้าสู่ระบบในแอป Rails ของคุณ
- ทำงานกับบริการภายนอกได้อย่างง่ายดาย (เช่น API)
- สร้างเว็บแอปพลิเคชัน
นั่นเป็นเพียงตัวอย่างบางส่วน อัญมณีทุกชิ้นมีเป้าหมายของตัวเอง
ทำไมเราถึงใช้อัญมณี
- เป็นวิธีที่เราแชร์ไลบรารีและเครื่องมือใน Ruby
- โครงสร้างไฟล์และรูปแบบของอัญมณีทำให้ง่ายต่อการเข้าใจวิธีการทำงาน
- ไฟล์ข้อกำหนด (“.spec”) ที่มาพร้อมกับทุก gem อธิบายถึงการขึ้นต่อกัน (อัญมณีที่จำเป็นอื่นๆ) ดังนั้นโค้ดจึงมีทุกสิ่งที่จำเป็นในการทำงาน
ต้องขอบคุณ RubyGems ที่เรามีระบบนิเวศที่สมบูรณ์ของไลบรารีที่เป็นประโยชน์ เพียงแค่ gem install
ออกไป!
รายการอัญมณีที่จำเป็นสำหรับโครงการที่กำหนด (ไม่ใช่อัญมณี) สามารถแสดงรายการในไฟล์พิเศษที่เรียกว่า "Gemfile" เพื่อให้ Bundler ติดตั้งได้โดยอัตโนมัติ ทั้งสองจะกล่าวถึงในภายหลังในคู่มือนี้
ตัวอย่างอัญมณีมีอะไรบ้าง
- Rails และส่วนประกอบทั้งหมด (ActiveRecord, ActiveSupport ฯลฯ) ถูกแจกจ่ายเป็น Ruby gem
- Pry ทางเลือกที่ทรงพลังสำหรับ irb
- Nokogiri โปรแกรมแยกวิเคราะห์ XML และ HTML ยอดนิยม
อัญมณีส่วนใหญ่เป็นรหัสทับทิมแท้
อัญมณีบางส่วนมีส่วนขยาย Ruby C เพื่อประสิทธิภาพที่ดีขึ้น
ส่วนขยายนี้สร้างขึ้นโดยอัตโนมัติสำหรับคุณเมื่อคุณติดตั้งอัญมณี ในบางกรณี คุณอาจต้องติดตั้งซอฟต์แวร์เพิ่มเติมด้วยตนเองที่ RubyGems ไม่ได้จัดการ
ตอนนี้ :
มาเรียนรู้เพิ่มเติมเกี่ยวกับอัญมณีด้วยการสร้างของคุณเองและดูไฟล์ที่สร้างอัญมณี
วิธีการสร้าง RubyGem
คุณสามารถเตรียมไฟล์สำหรับ gem ใหม่ได้โดยเรียกใช้ 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 ของโครงการ (โฮมเพจ), ไฟล์สั่งการ, ส่วนขยาย c, คำอธิบายแบบยาว
เวอร์ชันของ gem นั้นถูกกำหนดให้เป็นค่าคงที่ใน lib/<gem_name>/version.rb
.
นี่คือตัวอย่าง gemspec :
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
array เป็นที่ที่ Ruby จะค้นหาไฟล์ gem ของคุณเมื่อคุณต้องการ สิ่งนี้ทำให้คุณสามารถใส่รหัสของคุณภายใต้ 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
เส้นกำหนดอัญมณีที่คุณจะใช้ในระหว่างการพัฒนา
เหล่านี้คืออัญมณีอย่าง minitest, RSpec หรือ pry
ขณะที่ add_dependency
กำหนดอัญมณีที่คุณใช้เป็นส่วนหนึ่งของรหัสของคุณ
เมื่อคุณเปลี่ยนข้อมูลสรุป &คำอธิบายจากค่าเริ่มต้นแล้ว… คุณจะสามารถโหลดเซสชัน irb ด้วยอัญมณีของคุณโดยใช้ bin/console
โปรแกรมที่ 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
&เผยแพร่ไปที่ rubygems.org โดยใช้ gem push
.
มัดเดอร์คืออะไร
ในขณะที่เรียนรู้เกี่ยวกับ Ruby gem คุณอาจอ่านเกี่ยวกับ Bundler .
แต่ Bundler คืออะไรกันแน่?
Bundler เป็นเครื่องมือสำหรับการจัดการการพึ่งพา .
RubyGems จัดการเรื่องนี้อยู่แล้วใช่หรือไม่
ก็ใช่… แต่ เฉพาะตัวอัญมณีเท่านั้น .
แอปพลิเคชัน Ruby ปกติของคุณไม่ได้สร้างเป็นอัญมณี ดังนั้นจึงไม่ได้รับฟีเจอร์นี้
นั่นเป็นสาเหตุที่ Bundler มีอยู่จริง!
ทำความเข้าใจ Gemfiles
คุณเคยเห็น Gemfile
. เหล่านั้นไหม ไฟล์?
นั่นคือที่ที่คุณเขียนอัญมณีที่คุณต้องการใช้สำหรับแอปพลิเคชัน Ruby ของคุณ .
อัญมณีเหล่านี้จะโหลดให้คุณโดยไม่ต้อง require
เหล่านั้น
Gemfile หน้าตาแบบนี้ :
ruby '2.5.0' gem 'rails', '~> 5.2.1' gem 'sqlite3' gem 'puma', '~> 3.11' gem 'bootsnap', '>= 1.1.0', require: false
Bundler (และ RubyGems ตั้งแต่เวอร์ชัน 2.0) สามารถอ่านไฟล์นี้และติดตั้งเวอร์ชันที่ร้องขอของ gem เหล่านี้ได้
นี่คือสิ่งที่คุณควรเห็นเมื่อเรียกใช้ 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.
ตอนนี้ :
สัญลักษณ์เหล่านี้คืออะไร (เช่น ~>
) ใช้เมื่อประกาศเวอร์ชันสำหรับอัญมณีทุกอันใน Gemfile ของคุณหรือไม่
สิ่งเหล่านี้ทำให้คุณสามารถขอรุ่นต่างๆ .
คุณอาจพูดว่า “ฉันต้องการให้เวอร์ชันนั้นเท่ากับหรือมากกว่า 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
คุณมีตัวเลือกสองสามอย่างเมื่อต้องการอัญมณีใน Gemfile
ตัวอย่างเช่น :
คุณอาจต้องการดึงอัญมณีจากแหล่งอื่น เช่น GitHub
มีประโยชน์เมื่อคุณต้องการใช้เวอร์ชันล่าสุดของโครงการ แม้ว่าจะยังไม่ได้เผยแพร่บน rubygems.org
นี่คือตัวอย่าง:
gem "rails", git: "[email protected]:rails/rails.git"
คุณสามารถส่ง branch
ตัวเลือกในการใช้รหัสจากสาขาที่ไม่ใช่มาสเตอร์
ถูกใจสิ่งนี้ :
gem "awesome_print", git: "[email protected]:awesome-print/awesome_print.git", branch: "v2"
อีกตัวเลือกหนึ่งที่คุณอาจพบคือ require: false
.
ทำอะไรได้บ้าง
มันบอกให้ Bundler ไม่ต้องการอัญมณีให้คุณโดยอัตโนมัติ ซึ่งหมายความว่าคุณจะต้อง require
ในรหัสของคุณเมื่อคุณต้องการ
ใช้สำหรับอัญมณีที่มีขอบเขตจำกัด
ตัวอย่างเช่น :
อัญมณีที่คุณใช้ในงานเสาะหาเฉพาะ แต่คุณไม่ได้ใช้ในตัวควบคุมและโมเดล Rails ของคุณ ข้อดีคือคุณจะบันทึกหน่วยความจำในโค้ดของแอปได้เพราะคุณจะโหลดอัญมณีนั้นเมื่อต้องการเท่านั้น
คุณยังสามารถจัดกลุ่มอัญมณีตามสภาพแวดล้อม .
นั่นหมายความว่าคุณสามารถมีอัญมณีที่ติดตั้งและโหลดไว้ในระหว่างการพัฒนาเท่านั้น (เช่น capybara
&pry
)
สุดท้าย Bundler จะสร้าง Gemfile.lock
.
ต่างกันอย่างไร?
Gemfile.lock
สร้างโดยอัตโนมัติ &มันบอกว่า ทุกเวอร์ชันของอัญมณีถูกติดตั้ง .
Bundler จะติดตั้งเวอร์ชันเหล่านี้ ดังนั้นเมื่อคุณปรับใช้แอปพลิเคชันนี้ในเวอร์ชันที่ใช้งานจริง หรือแชร์โปรเจ็กต์ของคุณกับนักพัฒนารายอื่น ทุกคนจะทำงานด้วยอัญมณีชุดเดียวกัน
คำสั่ง Gem &Bundler ที่มีประโยชน์
คำสั่ง | คำอธิบาย |
---|---|
รายการอัญมณี | แสดงรายการอัญมณีที่ติดตั้งทั้งหมดของคุณ ยอมรับอาร์กิวเมนต์สำหรับการกรองอัญมณีตามชื่อ (ตัวอย่าง:gem list active ) |
อัญมณีที่ | ให้เส้นทางที่ติดตั้งอัญมณี |
ค้นหาอัญมณี | ค้นหาอัญมณีจากแหล่งที่กำหนดค่าไว้ (ค่าเริ่มต้น:rubygems.org) ใช้นิพจน์ทั่วไป (ตัวอย่าง:gem search "\Aawesome_" ) |
อัญมณี env | แสดงข้อมูลเกี่ยวกับสภาพแวดล้อมอัญมณีของคุณ (เวอร์ชัน เส้นทาง การกำหนดค่า) |
ติดตั้งอัญมณี | อนุญาตให้คุณติดตั้งเวอร์ชันอัญมณีเฉพาะ (ตัวอย่าง:gem install sinatra -v 2.0.0 ) |
กลุ่ม ได้แก่ | สร้างการแสดงภาพกราฟการพึ่งพาสำหรับโครงการปัจจุบันของคุณ |
การแสดงมัด | แสดงข้อมูลเกี่ยวกับ gem ที่ติดตั้งผ่าน Bundler ต้องอยู่ในโฟลเดอร์ที่มี Gemfile |
กลุ่มล้าสมัย | แสดงรายการอัญมณีที่ล้าสมัยในโปรเจ็กต์ปัจจุบัน สามารถใช้ --groups ตัวเลือกเพื่อจัดกลุ่ม |
คอนโซลชุด | เรียกใช้เซสชัน irb ด้วย gems จาก Gemfile ของโปรเจ็กต์ปัจจุบัน |
สรุป
คุณได้เรียนรู้เกี่ยวกับ RubyGems ซึ่งเป็นระบบแพ็คเกจสำหรับ Ruby แล้ว คุณยังได้เรียนรู้วิธีการจัดโครงสร้างอัญมณี Gemfile, Bundler คืออะไร &ความแตกต่างระหว่าง Gemfile
&Gemfile.lock
.
ฉันหวังว่าคุณจะพบว่าสิ่งนี้มีประโยชน์!
โปรดแบ่งปันบทความนี้ สมัครรับจดหมายข่าวหากคุณยังไม่ได้ (นักพัฒนา Ruby กว่า 9000 คน!) และดูหนังสือ Ruby ของฉัน
ขอบคุณสำหรับการอ่านและมีวันที่ดี🙂