В Ruby on Rails, какая разница между установкой чего-либо в виде гема или плагина? - PullRequest
3 голосов
/ 02 сентября 2010

Вкл. http://github.com/collectiveidea/delayed_job

это говорит:

Чтобы установить как гем, добавьте в config / environment.rb следующее:
config.gem 'delayed_job'
Выполнить rake gems:install

против

Для установки в качестве плагина:
script/plugin install git://github.com/collectiveidea/delayed_job.git

В чем разница между его установкой в ​​качестве гема или плагина?

Кроме того, первым способом просто установить gem 2.0.3, который может быть версией тоби? (rake gems:install устанавливает версию по gem list -r delayed_job) Это http://github.com/tobi/delayed_job? Метод "плагин", в частности, говорит, что это версия Collaboidea? Не имеет значения, какой из них вы устанавливаете?

Ответы [ 4 ]

4 голосов
/ 02 сентября 2010

Как самоцвет, так и встраиваемый плагин относятся к форку коллективной идеи. На самом деле Collectidea является текущим сопровождающим для delayed_job Gem на RubyGems.

Тем не менее, вообще говоря, установка плагинов в качестве Gem имеет много преимуществ.

  • Вы можете установить его один раз и использовать в разных проектах
  • Вы можете воспользоваться разрешением зависимости
  • Вы можете обновить, просто изменив номер версии
  • Вам не нужно хранить весь код плагина в вашем SCM

Итак, почему вы можете установить плагин "как плагин"? Есть много разных ответов.

В самом начале плагины Rails представляли собой простые библиотеки. Проходит время, и разработчики начали замечать преимущество упаковочных плагинов как Gem.

Кроме того, до Rails 3 некоторые функции плагинов были зарезервированы только для плагинов, а не для Gems. Например, до Rails 3 плагины могли связывать грабли, в то время как не было способа внедрить новые грабли или новые маршруты в основное приложение.

За последние два года большая часть плагинов Rails предлагает возможность установки как плагин или как Gem. Я уверен, что с Rails 3 и появлением Bundler плагины будут устаревшими в пользу Gems.

2 голосов
/ 02 сентября 2010

Это 2 разных репозитория, может быть, вам стоит попробовать

config.gem 'delayed_job', :source => http://github.com/collectiveidea/delayed_job.git

Посмотрите на: http://ryandaigle.com/articles/2008/4/1/what-s-new-in-edge-rails-gem-dependencies

Кстати.может быть, вы хотите найти, возможно, лучшее решение: resque - см. http://ruby -toolbox.com / Categories / queueing.html для сравнения используемых гемов очереди

1 голос
/ 02 сентября 2010

Когда вы установите гем, он будет доступен для всех приложений, если вы используете плагин - только для приложения, в которое он установлен.

0 голосов
/ 30 июня 2017

Основным отличием является то, что гем - это то, что устанавливается в системе, в которой работает ваше приложение Rails, тогда как плагин устанавливается вместе с вашим приложением, плагин не устанавливается на системном уровне.

предположим, что вы используете rvm, и давайте рассмотрим этот пример.

у нас есть два приложения app1 и app2

обаработают на общем наборе гемов rvm с именем gemset1

, когда вы добавляете гем в файл gemfile app1 и запускаете bundle install, а затем находитесь в том же наборе гемов rvm, которыйэто gemset1 , если вы запустите второе приложение app2 , гем будет доступен и во втором приложении

В то время как с плагином это не так, потому чтоплагины устанавливаются на уровне приложений, а не на уровне системы

...