Rails 3: определить зависимость плагина от самоцвета - PullRequest
10 голосов
/ 21 ноября 2010

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

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

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

Ответы [ 5 ]

16 голосов
/ 22 ноября 2010

Хорошо.Я решил.

1) Создайте Gemfile в vendor / plugins / my_plugin, например:

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

2) Создайте gemspec файл.В папке vendor / plugins выполните эту команду:

bundle gem my_plugin

(обратите внимание, эта команда попросит вас перезаписать некоторые файлы. Проверьте файлы перед ответом: Y)

3) Откройте файл gemspec в vendor / plugins / my_plugin / и добавьте до конца ключевого слова:

s.add_dependency('will_paginate', '~> 3.0.pre2')

(В этом примере я использовал will_paginate как требуетсяdipendency of my_plugin)

4) Теперь зайдите в приложение rails и отредактируйте Gemfile , добавьте:

gem 'my_plugin', :path=>'vendor/plugins/my_plugin'

Указанный путь предполагает, чтоВаш плагин уже находится в папке vendor / plugins вашего приложения rails.Конечно, при развертывании приложения rails вам больше не нужно указывать : путь аргумент.

5) Теперь в корневом каталоге приложения rails выполните:

bundle install

И установлена ​​ my_plugin (в данном случае will_paginate).

Спасибо Sinetris за начальный ввод.

2 голосов
/ 21 ноября 2010

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

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

gem "your-dependency-gem-name"

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

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

1 голос
/ 30 октября 2014

Собственный ответ Sebtm довольно хороший, но он все равно не сработал, как описали Tiago и orangechicken. Я должен был добавить

require 'your-dependency-gem-name'

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

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

0 голосов
/ 13 сентября 2013

Ссылка для себя. Если вы создаете плагин, который должен работать с Rails как RailTie, используйте rails plugin my_plugin для создания гема вместо bundle gem my_plugin. Это избавит вас (меня) от многих неприятностей.

Редактировать: Когда вам нужен гем для работы в качестве RailTie? Всякий раз, когда вы хотите добавить rails generator , rake tasks или добавить свой код в приложение Rails (называется 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. (используйте их релизный интерфейс) и зависите от него, используя

 gem 'my_plugin', github: 'accountname/my_plugin', tag: 'v0.7.0'
0 голосов
/ 21 ноября 2010

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

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