Я написал плагин, который требует жемчужины в качестве зависимости.
Где я должен определить эту зависимость?
Я попытался создать Gemfile в vendor/plugins/my_plugin/, но bundle install
не нашел этот файл.
Я написал плагин, который требует жемчужины в качестве зависимости.
Где я должен определить эту зависимость?
Я попытался создать Gemfile в vendor/plugins/my_plugin/, но bundle install
не нашел этот файл.
Ok. Я решил.
1) Создайте Gemfile в поставщике/плагинах/my_plugin, например:
# Gemfile
source "http://rubygems.org"
gemspec
2) Создайте файл gemspec. В папке vendor/plugins выполните следующую команду:
bundle gem my_plugin
(Обратите внимание, что эта команда просит вас перезаписать некоторые файлы. Проверьте файлы перед ответом: Y)
3) Откройте файл gemspec в поставщике/плагинах/my_plugin/и добавьте перед завершением ключевого слова:
s.add_dependency('will_paginate', '~> 3.0.pre2')
(В этом примере я использовал will_paginate, как требуется разность my_plugin)
4) Теперь зайдите в свое приложение rails и отредактируйте Gemfile, добавьте:
gem 'my_plugin', :path=>'vendor/plugins/my_plugin'
Указанный путь предполагает, что ваш плагин уже находится в папке поставщика/плагинов вашего приложения rails. Конечно, при развертывании приложения rails вам больше не нужно указывать аргумент : путь.
5) Теперь в rails app root выполните:
bundle install
И зависимость от my_plugin (будет в этом случае).
Спасибо Sinetris за исходный ввод.
Создайте Gemfile в вашем поставщике /plugins/my _plugin/like:
# Gemfile
source "http://rubygems.org"
gemspec
gem "your-dependency-gem-name"
Обратите внимание на директиву gemspec.
Посмотрите Использование Bundler с Rubygem gemspecs для получения дополнительной информации.
Собственный ответ Sebtm неплохой, но он все еще не работал, как описано Тьяго и оранжеречкли. Мне пришлось добавить
require 'your-dependency-gem-name'
поверх lib/my_plugin.rb
перед загрузкой двигателя my_plugin
.
См. http://guides.rubyonrails.org/engines.html#other-gem-dependencies
Gemfile в папке приложения.
# Bundle the extra gems:
# gem 'bj'
# gem 'nokogiri'
# gem 'sqlite3-ruby', :require => 'sqlite3'
# gem 'aws-s3', :require => 'aws/s3
Ссылка для себя. Если вы создаете плагин, который должен работать с Rails в качестве RailTie, используйте rails plugin my_plugin
для создания драгоценного камня вместо bundle gem my_plugin
. Это сэкономит вам (мне) много неприятностей.
Изменить: Когда вам нужен камень для работы в RailTie? Всякий раз, когда вы хотите добавить генератор рельсов, рейк-задачи или добавьте свой код в приложение Rails (Called Rails Engine). /Edit
$ rails plugin new my_plugin
то вы добавляете зависимости
Gem::Specification.new do |s|
#...
s.add_dependency "rails"
s.add_runtime_dependency "heroku"
s.add_development_dependency "sqlite3"
end
чтобы включить его в ваше приложение rails, используйте path:
, как описано @Sebtm
или отпустите его на рубигемы.
$ gem build my_plugin.gemspec
$ gem push my_plugin-0.7.0.gem #replace version number
#in Gemfile, as always
gem 'my_plugin'
или пометьте его на github. (используйте их UI) и зависеть от него, используя
gem 'my_plugin', github: 'accountname/my_plugin', tag: 'v0.7.0'