Рельсы 3: определение зависимости от оболочки плагина

Я написал плагин, который требует жемчужины в качестве зависимости.

Где я должен определить эту зависимость?

Я попытался создать Gemfile в vendor/plugins/my_plugin/, но bundle install не нашел этот файл.

Ответ 1

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 за исходный ввод.

Ответ 2

Создайте Gemfile в вашем поставщике /plugins/my _plugin/like:

# Gemfile
source "http://rubygems.org"
gemspec

gem "your-dependency-gem-name"

Обратите внимание на директиву gemspec.

Посмотрите Использование Bundler с Rubygem gemspecs для получения дополнительной информации.

Ответ 3

Собственный ответ Sebtm неплохой, но он все еще не работал, как описано Тьяго и оранжеречкли. Мне пришлось добавить

require 'your-dependency-gem-name'

поверх lib/my_plugin.rb перед загрузкой двигателя my_plugin.

См. http://guides.rubyonrails.org/engines.html#other-gem-dependencies

Ответ 4

Gemfile в папке приложения.

# Bundle the extra gems:
# gem 'bj'
# gem 'nokogiri'
# gem 'sqlite3-ruby', :require => 'sqlite3'
# gem 'aws-s3', :require => 'aws/s3

Ответ 5

Ссылка для себя. Если вы создаете плагин, который должен работать с 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'