Как мне указать локальные файлы .gem в моем Gemfile?
158
У меня есть пара драгоценных файлов, которые я устанавливаю через gem install xx.gem. Могу ли я сказать Bundler использовать их? Или я должен указать исходный путь?
Это не является строго ответом на ваш вопрос об установке .gemпакетов, но вы можете указать все виды местоположений на основе самоцветов, отредактировав свой Gemfile .
Указание :pathатрибута установит гем с этого пути на ваш локальный компьютер.
gem "foreman", path:"/Users/pje/my_foreman_fork"
Кроме того, указание :gitатрибута установит гем из удаленного репозитория git.
gem "foreman", git:"git://github.com/pje/foreman.git"# ...or at a specific SHA-1 ref
gem "foreman", git:"git://github.com/pje/foreman.git", ref:"bf648a070c"# ...or branch
gem "foreman", git:"git://github.com/pje/foreman.git", branch:"jruby"# ...or tag
gem "foreman", git:"git://github.com/pje/foreman.git", tag:"v0.45.0"
Также для некоторых брандмауэров может возникнуть проблема с протоколом git. В таком случае попробуйтеgem "foreman", :git => "https://github.com/pje/foreman.git"
kode
61
Кажется, упаковщик не может использовать .gem файлы из коробки. Указание: пути к каталогу, содержащему файлы .gem, не работает. Некоторые люди предлагали для этого установить локальный гем-сервер (geminabox, stickler).
Однако я обнаружил, что гораздо проще использовать локальный gem-сервер из файловой системы: просто поместите ваши файлы .gem в локальный каталог, а затем используйте «gem generate_index», чтобы сделать его хранилищем Gem.
Спасибо! Кроме того, мне потребовалась третья косая черта, чтобы сделать «file: /// Absolute / Path / to / repo»
Анна
5
Не проще ли запустить «gem server» в командной строке и добавить источник « localhost: 8808 » в свой Gemfile
Анна
Это действительно круто, Мартин! Спасибо за то, что поделились, это именно то, что я искал, так как я не хотел зависеть от запуска и gem serverне хотел размещать весь проект, только файл .gem.
Лео Галлуччи
6
Дополнительный совет: Вы можете обойти требование абсолютного пути, используя File.expand_path как этотsource "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Лео Галлуччи
Не работает для меня Mac OS X. Bundler v1.11.2:Could not fetch specs from file://Users/nakilon/....../
Накилон
44
Я бы распаковал ваш драгоценный камень в папке поставщика приложений
По умолчанию Bundler сначала проверит вашу систему, и если он не сможет найти драгоценный камень, он будет использовать источники, указанные в вашем Gemfile.
Правда. но что, если я не установил его раньше? (при развертывании на сервере) Не удалось найти Imlib2-Ruby-0.5.2 ни в одной из исходных команд. Закончено
ddayan
184
вы можете указать на локальный каталог с помощью gem "gemname",: path => "~ / some / local / path"
JHurrah
5
Я думаю, что: путь требует папку gem с файлом gemspec. У меня есть только файлы .gem, которые я хочу установить.
Ддайан
1
Итак, развертывание кэпа прошло, но гем не был установлен "Нет такого файла для загрузки - vips": /
ddayan
4
Это определенно не соответствует действительности, по крайней мере, дольше. Bundler не смотрит на ваши системные гемы, а только следит за тем, что находится в Gemfile. Одна из причин, это так ужасно.
bioneuralnet
6
Вы можете заставить сборщик использовать развернутые гемы, используя «пакет комплекта» и «комплект комплекта --local»
На вашей машине разработки:
bundle install
(Устанавливает необходимые гемы и делает Gemfile.lock)
bundle package
(Кэширует драгоценные камни в вендоре / кеше)
На сервере:
bundle install --local
(--local означает «использовать драгоценные камни из вендора / кэша»)
Что делать, если я не могу ничего установить на сервер? В этом случае мне нужно собрать с помощью rake, но у сервера нет гема, который я использую для сборки; но у меня нет проблем с проверкой зависимостей.
Хенрик
«Установка пакета» у меня не сработала, если драгоценный камень не был включен в мой существующий источник Gemfile
Анна
Просто удалите gem-файл, временно bundle installсоздайте его, затем скопируйте gem-файл в vendor / cache , добавьте gem обратно в gem-файл и выполните bundle install --local
команду
1
bundle packageотличное предложение, даже сейчас, три года спустя. Если ваша версия Bundler старше 2.0 (еще не выпущена на момент написания этой статьи), вам нужно будет использовать ее, bundle package --allесли вы хотите включить гемы pathили gitзависимости. Тем не менее, он даст вам полезное напоминание, если обнаружит такие зависимости.
L2G
1
К вашему сведению: это может работать не так хорошо, как вы надеетесь, если вы разрабатываете на платформе, отличной от той, на которой вы развертываете (например, разработка на macOS, развертывание на Linux) Согласно --localдокументации: «Обратите внимание, что если на rubygems.org существует соответствующий платформенный гем, он не будет найден».
Лиам Доусон
1
Добавление .gemк, vendor/cacheкажется, работает. Никаких вариантов не требуется Gemfile.
Ответы:
Это не является строго ответом на ваш вопрос об установке
.gem
пакетов, но вы можете указать все виды местоположений на основе самоцветов, отредактировав свой Gemfile .Указание
:path
атрибута установит гем с этого пути на ваш локальный компьютер.Кроме того, указание
:git
атрибута установит гем из удаленного репозитория git.(Как упомянул @JHurrah в своем комментарии .)
источник
gem "foreman", :git => "https://github.com/pje/foreman.git"
Кажется, упаковщик не может использовать .gem файлы из коробки. Указание: пути к каталогу, содержащему файлы .gem, не работает. Некоторые люди предлагали для этого установить локальный гем-сервер (geminabox, stickler).
Однако я обнаружил, что гораздо проще использовать локальный gem-сервер из файловой системы: просто поместите ваши файлы .gem в локальный каталог, а затем используйте «gem generate_index», чтобы сделать его хранилищем Gem.
Наконец, наведите указатель на это местоположение, добавив следующую строку в ваш Gemfile
Если вы обновите драгоценные камни в хранилище, обязательно обновите индекс.
источник
gem server
не хотел размещать весь проект, только файл .gem.source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Could not fetch specs from file://Users/nakilon/....../
Я бы распаковал ваш драгоценный камень в папке поставщика приложений
Затем добавьте путь в Gemfile, чтобы связать распакованный гем.
источник
По умолчанию Bundler сначала проверит вашу систему, и если он не сможет найти драгоценный камень, он будет использовать источники, указанные в вашем Gemfile.
источник
Вы можете заставить сборщик использовать развернутые гемы, используя «пакет комплекта» и «комплект комплекта --local»
На вашей машине разработки:
(Устанавливает необходимые гемы и делает Gemfile.lock)
(Кэширует драгоценные камни в вендоре / кеше)
На сервере:
(--local означает «использовать драгоценные камни из вендора / кэша»)
источник
bundle install
создайте его, затем скопируйте gem-файл в vendor / cache , добавьте gem обратно в gem-файл и выполнитеbundle install --local
bundle package
отличное предложение, даже сейчас, три года спустя. Если ваша версия Bundler старше 2.0 (еще не выпущена на момент написания этой статьи), вам нужно будет использовать ее,bundle package --all
если вы хотите включить гемыpath
илиgit
зависимости. Тем не менее, он даст вам полезное напоминание, если обнаружит такие зависимости.--local
документации: «Обратите внимание, что если на rubygems.org существует соответствующий платформенный гем, он не будет найден».Добавление
.gem
к,vendor/cache
кажется, работает. Никаких вариантов не требуетсяGemfile
.источник
Я нашел, что проще всего запустить свой собственный гем-сервер, используя
geminabox
Смотрите эти простые инструкции .
источник