วิธีการติดตั้ง gem จากแหล่ง GitHub?


451

ฉันต้องการติดตั้งอัญมณีจากแหล่ง GitHub ล่าสุด

ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


332

ในกรณีที่คุณใช้งาน Bundler คุณต้องเพิ่มสิ่งนี้ใน Gemfile ของคุณ:

gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git'

และในกรณีที่มีไฟล์ก็ควรจะสามารถที่จะดึงข้อมูลและติดตั้งอัญมณีเมื่อทำงาน.gemspecbundle install

UPD ตามที่ระบุไว้ในความคิดเห็นเพื่อให้ Bundler ทำงานได้อย่างถูกต้องคุณต้องเพิ่มสิ่งต่อไปนี้ในconfig.ru:

require "bundler" 
Bundler.setup(:default)

9
ฉันยังต้องเพิ่มสิ่งต่อไปนี้ (เพิ่มลงใน config.ru ของฉัน): require "bundler" Bundler.setup(:default)ดูเอกสารของ Bundlerสำหรับรายละเอียดเพิ่มเติม
Louis Sayers

40
นอกจากนี้หนึ่งสามารถระบุตัวเลือกอ้างอิงสาขาหรือแท็กตัวอย่างเช่นgem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :branch => 'yourbranch'
Amit Patel

25
นอกจากนี้ยังมี: gem 'redcarpet', github: 'tanoku/redcarpet'. akash.im/2012/06/05/bundler-new-github-option.html
Andrew

@AmitPatel ขอบคุณมาก !!! : branch => 'yourbranch' บรรทัดนี้ของคุณได้แก้ไขปัญหาที่ยิ่งใหญ่สำหรับฉันแล้ว ขอบคุณมากสำหรับคุณ
KM Rakibul Islam

3
@gaussblurinc gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :tag => 'v2.3.5'<- :tag => ''ส่วน
Misha Reyzlin

400

ดีขึ้นอยู่กับโครงการที่มีปัญหา บางโครงการมีไฟล์ * .gemspec ในไดเรกทอรีราก ในกรณีนั้นมันจะเป็น

gem build GEMNAME.gemspec
gem install gemname-version.gem

โครงการอื่น ๆ มีงานเรคเรียกว่า "อัญมณี" หรือ "สร้าง" หรืออะไรทำนองนั้นในกรณีนี้คุณต้องเรียกใช้ "เรค" แต่ขึ้นอยู่กับโครงการ

ในทั้งสองกรณีคุณต้องดาวน์โหลดแหล่งที่มา


2
ขอบคุณ - คำตอบที่สมบูรณ์
Jon Schoning

20
เพียงแค่เคล็ดลับเพื่อให้ผู้คนได้รู้ว่าเกิดอะไรขึ้นจริง ๆ gemname-version.gemไฟล์ถูกสร้างขึ้นเมื่ออัญเชิญgem build
รอ Dev ...

ที่ไม่gem install gemname-version.gemคำสั่งติดตั้งอัญมณีคอมไพล์ในประเทศ? ฉันไม่สามารถหาที่ใดก็ได้ในเครื่องท้องถิ่นที่ติดตั้ง gem engine ด้วยวิธีนี้ Bundler ซ่อนอยู่ที่ไหน?
Green

2
ฉันคิดว่าgem install gemname-version.gemบรรทัดควรเป็นgem install --local gemname-version.gem
JonB

@Green - gem which gemnameควรบอกคุณหรือไม่ว่าอัญมณีชนิดใดที่ไม่เหมาะกับคุณ?
Sameers

255

ลองใช้gem specific_install ซึ่งจะช่วยให้คุณติดตั้ง gem ได้จากที่เก็บ github (เช่น 'edge') หรือจาก URL ที่กำหนดเอง มีประโยชน์อย่างมากสำหรับการฟอร์กอัญมณีและแฮ็คมันบนเครื่องหลายเครื่องและเช่นนั้น

gem install specific_install
gem specific_install -l <url to a github gem>

เช่น

gem specific_install https://github.com/githubsvnclone/rdoc.git 

3
คุณสามารถเพิ่มคำอธิบายเพิ่มเติมเกี่ยวกับspecific_installอัญมณีได้ไหม?
microspino

1
นี่คือสิ่งที่ฉันกำลังมองหาคล้ายกับการสนับสนุน pip pipit ไพ ธ อน gem specific_install -l <url ไปยัง project บน github> ทำงานเหมือนเครื่องราง!
Murph

1
ERROR: While executing gem ... (NoMethodError) undefined method 'build' for Gem::Package:Module ฟังดูเท่มาก แต่ฉันจะไม่มองมันอีกต่อไป แค่ต้องการโพสต์ว่ามันไม่ได้ผลสำหรับฉันในกรณีที่คนอื่นกำลังจะให้มันหมุนวนตามคำแนะนำ SO
isomorphismes

1
@isomorphismes +1 กับความคิดเห็นของคุณ ฉันสร้างคำถามแยกต่างหากเกี่ยวกับข้อผิดพลาดที่นี่: stackoverflow.com/questions/27045874/…
La-comadreja

1
นี่คือผู้ช่วยชีวิต! ขอบคุณครับ
Noldorin

34

Bundlerช่วยให้คุณใช้อัญมณีโดยตรงจากที่เก็บ git ใน Gemfile ของคุณ:

# Use the http(s), ssh, or git protocol
gem 'foo', git: 'https://github.com/dideler/foo.git'
gem 'foo', git: 'git@github.com:dideler/foo.git'
gem 'foo', git: 'git://github.com/dideler/foo.git'

# Specify a tag, ref, or branch to use
gem 'foo', git: 'git@github.com:dideler/foo.git', tag: 'v2.1.0'
gem 'foo', git: 'git@github.com:dideler/foo.git', ref: '4aded'
gem 'foo', git: 'git@github.com:dideler/foo.git', branch: 'development'

# Shorthand for public repos on GitHub (supports all the :git options)
gem 'foo', github: 'dideler/foo'

สำหรับข้อมูลเพิ่มเติมโปรดดูhttps://bundler.io/v2.0/guides/git.html


อาจเป็นคำตอบที่ดีที่สุด
Anton Semenichenko

โปรดทราบว่าคุณอาจมีปัญหาหากคุณใช้วิธีนี้กับผู้โดยสารและ apache / ngix เมื่อรันbundlegit-gem- dependencies ดังกล่าวจะไม่ถูกติดตั้งแบบโกลบอล แต่จะอยู่ในโฮมไดเร็กตอรี่ของผู้ใช้ปัจจุบันแทน ผู้โดยสารจะทำงานทับทิมในขณะที่ผู้ใช้เว็บเซิร์ฟเวอร์ของคุณ (เช่นwww-data) ซึ่งไม่สามารถเข้าถึงไดเรกทอรีนี้ดังนั้น "git-gem" นี้จะไม่ถูกโหลด ... is not yet checked out. Run bundle install firstคุณจะได้รับข้อผิดพลาด
ก้างปลา

16

OBSOLETE (ดูความคิดเห็น)

หากโครงการมาจาก github และมีอยู่ในรายการบนhttp://gems.github.com/list.htmlคุณสามารถเพิ่ม repo github ไปยังแหล่ง gems เพื่อติดตั้ง:

$ gem sources -a http://gems.github.com
$ sudo gem install username-projectname

1
o rly? ฉันเพิ่งทำสิ่งนี้และมันทำงานได้ ... ไปที่ gems.github.com ก่อนที่จะเพิ่มลงในแหล่งข้อมูลปีที่ฉันเดา? (แต่อย่าใช้ sudo)
esharp

7
@esharp พวกเขาโฮสต์สิ่งที่พวกเขาสร้างขึ้น แต่พวกเขาไม่ได้สร้างอีกต่อไป หากอัญมณีได้รับการปรับปรุงตั้งแต่ปี 2009สำเนา gems.github.com จะล้าสมัย
Tobu

13

หากคุณได้รับอัญมณีจากที่เก็บ GitHub สาธารณะคุณสามารถใช้ชวเลข

gem 'nokogiri', github: 'tenderlove/nokogiri'

4

นอกจากนี้คุณสามารถทำ gem install username-projectname -s http://gems.github.com


6
เลิกใช้แล้วดูความคิดเห็นคำตอบอื่น
Lee Hambley

1
ยังคงช่วยฉันสำหรับปัญหาเกี่ยวกับรหัสฐานเก่า ใช่ปี 2013 และฉันกำลังทำงานในโครงการรถไฟ 2.3.4
Vivek Sampara

4

ใน Gemfile ของคุณเพิ่มต่อไปนี้:

gem 'example', :git => 'git://github.com/example.git'

คุณยังสามารถเพิ่มตัวเลือกการอ้างอิงสาขาและแท็ก

ตัวอย่างเช่นหากคุณต้องการดาวน์โหลดจากสาขาใดสาขาหนึ่ง:

gem 'example', :git => "git://github.com/example.git", :branch => "my-branch"

จากนั้นเรียกใช้:

bundle install

3

หากคุณติดตั้งโดยใช้ Bundler ตามที่แนะนำโดย gryzzly และอัญมณีสร้างไบนารีแล้วตรวจสอบให้แน่ใจว่าคุณใช้มันbundle exec mygembinaryเพราะอัญมณีจะถูกเก็บไว้ในไดเรกทอรี Bundler ซึ่งไม่สามารถมองเห็นได้บนเส้นทางอัญมณีปกติ


2

บนเครื่อง Linux gitสดคุณยังจำเป็นต้องติดตั้ง Bundle ใช้มันอยู่เบื้องหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.