Как установить гем из источника GitHub?

451

Я хотел бы установить gem из последней версии GitHub.

Как мне это сделать?

Vojto
источник

Ответы:

332

Если вы используете bundler, вам нужно добавить что-то вроде этого в ваш Gemfile:

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

И в случае, если есть .gemspecфайл, он должен быть в состоянии получить и установить гем при запуске bundle install.

UPD. Как указано в комментариях, для правильной работы Bundler вам также необходимо добавить следующее config.ru:

require "bundler" 
Bundler.setup(:default)
Миша Рейзлин
источник
9
Мне также нужно было добавить следующее (добавлено на мой config.ru): require "bundler" Bundler.setup(:default)Более подробную информацию смотрите в документах на комплектующие
Луи Сэйерс,
40
Кроме того, можно указать ref, ответвление или параметры тега, например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
Эндрю
@AmitPatel Большое спасибо !!! : branch => 'yourbranch', ваша эта строка решила большую проблему для меня только сейчас. Так много благодарен вам.
К.М. Ракибул Ислам
3
@gaussblurinc gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :tag => 'v2.3.5'<- :tag => ''часть
Миша Рейзлин
400

хорошо, это зависит от проекта. Некоторые проекты имеют файл * .gemspec в своем корневом каталоге. В этом случае это будет

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

Другие проекты имеют задачу rake, называемую «gem» или «build» или что-то в этом роде, в этом случае вам нужно вызвать «rake», но это зависит от проекта.

В обоих случаях вам нужно скачать исходный код.

Доминик Хоннеф
источник
2
Спасибо - идеальный ответ.
Джон Шонинг
20
Просто совет, чтобы люди знали, что на самом деле происходит. gemname-version.gemФайл создается при вызовеgem build
Ожидание Dev ...
Где gem install gemname-version.gemкоманда устанавливает git gem локально? Я не могу найти нигде в своей локальной машине драгоценный камень двигателя, установленный таким образом. Где упаковщик скрывает это?
Green
2
Я думаю, что gem install gemname-version.gemлиния должна бытьgem install --local gemname-version.gem
JonB
@ Зеленый - gem which gemnameдолжен сказать вам, где конкретный драгоценный камень, это не работает для вас?
Самирс
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 
Kamek
источник
3
Не могли бы вы добавить больше объяснений на specific_installжемчужине?
microspino
1
Это именно то, что я искал, похоже на поддержку Python для git. gem specific_install -l <url для проекта на github> работал как шарм!
Мерф
1
ERROR: While executing gem ... (NoMethodError) undefined method 'build' for Gem::Package:Module Звучит очень круто, но я не буду вдаваться в подробности. Просто хотел опубликовать, что это не сработало для меня на случай, если кто-то еще собирается сделать это, основываясь на рекомендациях SO.
изоморфизм
1
@isomorphismes +1 к вашему комментарию. Я создал отдельный вопрос об этой ошибке здесь: stackoverflow.com/questions/27045874/…
La-comadreja
1
Это спасатель! Спасибо, сэр.
Нолдорин
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.

Деннис
источник
наверное лучший ответ
Антон Семениченко
Обратите внимание, что у вас могут возникнуть проблемы, если вы будете использовать этот подход для пассажиров и apache / ngix. При запуске bundleтакие git-gem-зависимости будут устанавливаться не глобально, а в домашнем каталоге текущего пользователя. Пассажир будет запускать ruby ​​как пользователь вашего веб-сервера (например www-data), у которого нет доступа к этому каталогу, и поэтому этот «git-gem» не будет загружен. Вы получите ошибку ... is not yet checked out. Run bundle install first.
fishbone
16

OBSOLETE (см. Комментарии)

Если проект от github и содержится в списке на http://gems.github.com/list.html , то вы можете просто добавить репозиторий github к источникам gems, чтобы установить его:

$ gem sources -a http://gems.github.com
$ sudo gem install username-projectname
Майкл Перейра
источник
1
хорошо? я только что сделал это, и это сработало ... перейдите на gems.github.com, прежде чем добавлять его в ваши источники, я думаю? (но не используйте sudo)
esharp
7
@esharp, они размещают те, которые построили, но больше их не строят. Если драгоценный камень был обновлен с 2009 года , копия gems.github.com устареет.
Тобу
13

Если вы получаете свои драгоценные камни из общедоступного репозитория GitHub, вы можете использовать сокращение

gem 'nokogiri', github: 'tenderlove/nokogiri'
Раджив Каннав Шарма
источник
4

Также вы можете сделать gem install username-projectname -s http://gems.github.com

Чак Восе
источник
6
Устаревшие, см. Комментарии другого ответа.
Ли Хэмбли
1
Все еще помог мне в проблеме со старой базой кода. Да, это 2013 год, и я работаю над проектом Rails 2.3.4.
Вивек Сампара
4

В вашем Gemfile добавьте следующее:

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

Вы также можете добавить ссылки, параметры ветки и теги,

Например, если вы хотите скачать из определенной ветки:

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

Затем запустите:

bundle install
slal
источник
3

Если вы устанавливаете с использованием bundler в соответствии с предложением gryzzly, а гем создает двоичный файл, убедитесь, что вы запускаете его, bundle exec mygembinaryпоскольку гем хранится в каталоге компоновщика, который не виден в обычном пути к гему.

Марк Чевертон
источник
2

На новую Linux-машину вам также нужно установить git. Bundle использует это за кулисами.

user1208639
источник