Я создаю веб-приложение Rails, которое использует общую библиотеку моделей (как Rails Engine), хранящихся в подрепозитории (поддерево Git). Эта общая библиотека содержит зависимости от других камней Ruby (в моем случае, HTTParty и Dalli), из которых я хочу автоматически ссылаться на родительский проект, который включает эту общую библиотеку.Рельсы: привязка к жемчужинам Ruby?
Однако зависимости моего gem, как представляется, не разрешаются в родительском проекте, и когда я запускаю свое веб-приложение, у него отсутствуют ссылки на эти зависимости gem в общей библиотеке. (т. е. NameError: uninitialized constant ApiClient::HTTParty
) Если я явно добавлю эти ссылки к Gemfile моего веб-приложения (как в раскомментировании строк Gemfile ниже), все работает нормально.
Как я могу получить эти зависимости в цепочке, а родительский проект автоматически разрешит эти ссылки?
Вот что мой проект выглядит следующим образом:
[MyRailsApp]
-- ...
-- [app]
-- [config]
-- [lib]
-- [MyLib]
-- ...
-- [app]
-- [config]
-- [lib]
-- [MyLib]
-- version.rb
-- engine.rb
-- MyLib.gemspec
-- Gemfile
-- Gemfile
MyRailsApp/Gemfile:
source 'https://rubygems.org'
gem 'activesupport', '3.2.13', :require => 'active_support'
gem 'actionpack', '3.2.13', :require => 'action_pack'
gem 'actionmailer', '3.2.13', :require => 'action_mailer'
gem 'railties', '3.2.13', :require => 'rails'
...
# gem 'dalli'
# gem 'httparty'
gem 'MyLib', :path => 'lib/MyLib'
MyLib/MyLib.gemspec:
$:.push File.expand_path("../lib", __FILE__)
# Maintain your gem's version:
require "mylib/version"
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
s.name = "MyLib"
s.version = MyLib::VERSION
s.authors = ["David"]
s.email = ["[email protected]"]
s.homepage = "http://www.mysite.com"
s.summary = "Shared Library"
s.description = "Shared Library"
s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"]
s.add_dependency "rails", "~> 3.2.13"
s.add_dependency "dalli", ">= 2.6.4"
s.add_dependency "httparty", ">= 0.11.0"
end
ли вы имеете в виду подмодуль в отличие от subrepository (ртутный)? –
Технически поддерево, да, в отличие от подмодуля. –