Установка gem-файла Gemfile и зависимости gemspec

У меня есть приложение, для которого Gemfile требуется драгоценный камень, который также зависит от другого драгоценного камня, который в настоящее время находится на github.

Итак, app/Gemfile читается как gem "my-gem", :git => "git://github.com/MyCompany/my-gem.git"

my-gem/Gemfile читает gem "my-gem-2", :git => "[email protected]:MyCompany/my-gem-2.git"

my-gem/my-gem.gemspec читает spec.add_dependency "my-gem-2"

Когда я запускаю пакет внутри приложения, я получаю сообщение об ошибке, что он не может найти драгоценный камень my-gem-2, который требуется для моего драгоценного камня; однако, если я помещу следующую строку gem "my-gem-2", :git => "[email protected]:MyCompany/my-gem-2.git" внутри app/Gemfile, тогда все будет работать нормально.

Эта практика кажется избыточной, поскольку я не думаю, что мне придется добавлять зависимости драгоценных камней от другого драгоценного камня в мое родительское приложение. Есть ли что-то, что я делаю неправильно, что myapp не может найти my-gem-2?


person rantingsonrails    schedule 09.04.2013    source источник


Ответы (2)


Как указано в спецификации драгоценных камней, список драгоценных камней, которые вы предоставляете через add_dependency, будет используйте, чтобы убедиться, что они уже установлены в системе во время процесса установки (например, установка gem). Итак, эта строка:

my-gem/my-gem.gemspec reads spec.add_dependency "my-gem-2"

Запустит проверку того, установлен ли гем в системе, но не запустит автоматическую установку такого гем, как это сделал бы Бандлер.

Эта другая строка (внутри вашего драгоценного камня):

gem "my-gem-2", :git => "[email protected]:MyCompany/my-gem-2.git"

Укажите, что гем должен поступать из репозитория git с .gemspec в корне.

Подробнее: Gems из репозиториев git

person fmendez    schedule 09.04.2013
comment
Что мне все еще неясно, так это сценарий, в котором у my-gem есть Gemfile с путем к my-gem-2; и я включаю my-gem в Gemfile приложения; когда я запускаю bundle внутри каталога приложения; будет ли упаковщик также запускать Gemfiles каждого зависимого гема, в данном случае my-gem, чтобы установить my-gem-2 из Gemfile моего гема? - person rantingsonrails; 11.04.2013
comment
Способ, которым упаковщик разрешает зависимости драгоценных камней, перечисленных в Gemfile, использует source 'http://rubygems.org'. Когда он основал это: gem "my-gem", :git..., он пошел и получил драгоценный камень из github, но зависимость не найдена на source, поэтому он жалуется. Насколько мне известно, Bundler не будет пытаться установить зависимости с помощью Gemfiles в драгоценных камнях, на которые вы указываете. - person fmendez; 11.04.2013

Это именно то, как это происходит - зависимости Gemfile внутри драгоценных камней только для того, когда вы разрабатываете этот драгоценный камень. Только gemspec оценивается, когда гем используется в другом месте (а gemspec не имеет понятия о зависимостях git), поэтому применяются только зависимости в gemspec.

Итак: вам нужно будет иметь обе ссылки git в Gemfile вашего приложения.

person pat    schedule 09.04.2013