Как обстоят дела с рубинами в Debian?Это отличается и странно - PullRequest
8 голосов
/ 17 мая 2010

Я заметил по крайней мере следующие странности вокруг рубинов в Debian (5.0 lenny в моем случае):

  • Пакеты находятся в другом месте установки: / var / lib / gems vs / usr / lib / ruby ​​/ gems
  • Пакет debian представляет собой rubygems 1.3.6, и обновление rubygems до последней версии (1.3.7) не работает:
  $ sudo gem update --system
  ERROR:  While executing gem ... (RuntimeError)
    gem update --system is disabled on Debian. RubyGems can be updated using the official Debian repositories by aptitude or apt-get.
  • Не все драгоценные камни работают так же, как в других системах. Например, при установке Phusion Passenger он не обнаружил «стойку», даже если он был определенно установлен.
  • Ручная установка rubygems с использованием исходного архива и переустановка всех моих драгоценных камней (в / usr / lib / ruby ​​/ gems) позволила решить мои проблемы.

В чем дело? Почему пакет Debian отличается?

Ответы [ 3 ]

15 голосов
/ 17 мая 2010

Обратите внимание, что то, что я написал ниже, значительно изменилось в последнее время. Команда Debian Ruby более или менее полностью обновила весь свой подход, включая, но не ограничиваясь, упаковку RubyGems. Я не уверен насчет Debian 6, но в версии после установка Ruby и пакета RubyGems из Debian должна быть безопасной, возможно, даже рекомендуется. И очевидно, что это будет распространяться и на Ubuntu.


[РЕДАКТИРОВАТЬ: Следующее устарело в Debian 7 не позднее.]

Смешивание с двумя разными менеджерами пакетов - это, как правило, очень плохая идея. Команда Debian-Ruby делает все возможное, чтобы исправить RubyGems таким образом, чтобы это стало чуть менее плохой идеей.

Кроме того, в Debian есть набор правил, предназначенных для поддержания согласованности системы. RubyGems также имеет свой собственный набор правил. Эти два набора правил, к сожалению, не совместимы. Итак, разработчики Debian-Ruby исправляют RubyGems, чтобы соблюдать правила Debian вместо правил RubyGems. Перемещение драгоценных камней с /usr/lib/ruby на /var/lib является одной из таких вещей.

Другая проблема в том, что стабильный Debian, ну, в общем, стабилен. Это означает, что команда Debian гарантирует , что поведение всей системы , всех 20000 пакетов, никогда не изменится во время выпуска. Но разработчики RubyGems не делают свои исправления по отдельности доступными, единственный способ получить исправление - это обновить его до новой версии с (потенциально) другим поведением. Поэтому разработчики Debian-Ruby не могут просто взять исходные тексты RubyGems без изменений, они должны перепроектировать исправления ошибок из 1.3.7 и применить их к их версии 1.3.6 для обеспечения обратной совместимости.

В общем, вам следует избегать смешивания менеджеров пакетов. Либо используйте RubyGems для всего (в этом случае лучше установить RubyGems из исходного кода, а не с помощью пакета Debian), либо используйте APT для всего, в этом случае вас может заинтересовать DebGem , услуга, предоставляемая Ребята из Phusion (создатели Ruby Enterprise Edition и Phusion Passenger), которые предоставляют пакеты Debian и Ubuntu практически для всех Gems.

3 голосов
/ 17 мая 2010

Если вам нравится управлять своей рубиновой средой, я могу взглянуть на RVM . Это хороший способ иметь разные среды, отвечающие вашим потребностям разработчиков, потому что разумнее позволить пакетам debian управлять глобальной средой ruby.

1 голос
/ 16 июля 2011

Лучший способ избежать различий и странностей - это установить его из исходного кода. (Многие люди рекомендуют делать это в любом случае.)

Начиная с версии 1.9.2 очень легко установить Ruby из исходного кода. Это дает вам драгоценность и все остальное, автоматически и полностью интегрировано. (Например, с установленным гемом Rails вы можете набрать 'ri field_for', чтобы узнать все о вложенных формах в Rails.)

С или без RVM, теперь это самый простой и надежный способ получить Ruby. Мой 10с, во всяком случае.

...