Установка declarative_authorization устанавливает зависимости rails 3

#ruby #rubygems

#ruby #rubygems

Вопрос:

версия 0.4.1 драгоценного камня declarative_authorization имеет rails >= 2.1.0 в качестве зависимости. Если вы сначала установите rails 2.3.5, а затем установите 0.4.1 declarative_authorization, вы получите зависимости Rails 3. Если для declarative_authorization требуется rails >= 2.1.0, если установлена 2.3.5, эта зависимость должна быть удовлетворена, верно? Что вызывает установку всех других драгоценных камней? Это ошибка rubygems?

 $ ruby -v
ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-darwin10.4.0], MBARI 0x6770, Ruby Enterprise Edition 2010.02

$ gem -v
1.3.7

$ gem install rails -v 2.3.5
Successfully installed rake-0.8.7
Successfully installed activesupport-2.3.5
Successfully installed activerecord-2.3.5
Successfully installed rack-1.0.1
Successfully installed actionpack-2.3.5
Successfully installed actionmailer-2.3.5
Successfully installed activeresource-2.3.5
Successfully installed rails-2.3.5
8 gems installed

$ gem install declarative_authorization -v 0.4.1
Successfully installed declarative_authorization-0.4.1
Successfully installed activesupport-3.0.3
Successfully installed builder-2.1.2
Successfully installed i18n-0.4.2
Successfully installed activemodel-3.0.3
Successfully installed rack-1.2.1
Successfully installed rack-test-0.5.6
Successfully installed rack-mount-0.6.13
Successfully installed tzinfo-0.3.23
Successfully installed abstract-1.0.0
Successfully installed erubis-2.6.6
Successfully installed actionpack-3.0.3
Successfully installed arel-2.0.4
Successfully installed activerecord-3.0.3
Successfully installed activeresource-3.0.3
Successfully installed mime-types-1.16
Successfully installed polyglot-0.3.1
Successfully installed treetop-1.4.9
Successfully installed mail-2.2.10
Successfully installed actionmailer-3.0.3
Successfully installed thor-0.14.4
Successfully installed railties-3.0.3
Successfully installed bundler-1.0.7
23 gems installed

$ gem dependency declarative_authorization
Gem declarative_authorization-0.4.1
  rails (>= 2.1.0, runtime)
  

Ответ №1:

Когда вы указываете номер версии с помощью >= для драгоценного камня, Rubygems всегда будет пытаться получить последнюю версию для этого драгоценного камня, независимо от того, удовлетворена ли зависимость. Это не ошибка, а скорее ожидаемое поведение. Чтобы исправить это, автор gem должен указать, что gem зависит от любой версии Rails 2, выполнив это:

 s.add_dependency 'rails', '~> 2'
  

Подводя итог, это ошибка автора gem, а не Rubygems.

Комментарии:

1. Спасибо за ответ, Райан. Однако поведение >= мне кажется странным. Однако есть еще один вопрос. Почему не устанавливается более новая версия rails? Он установил зависимости rails 3, но не фактический rails 3 gem. Это ожидаемое поведение?

Ответ №2:

Это вызывает недоумение.

Возможно, что драгоценный камень declarative_authorization зависит от какого-то другого драгоценного камня, который ошибочно зависит от rails3. Я заметил один драгоценный камень, который начал использовать какую-то новую функцию ActiveSupport 3 и это нарушило всю цепочку.