Каковы преимущества и недостатки установки вещей в набор гемов @global в RVM? - PullRequest
3 голосов
/ 20 мая 2011

Каковы преимущества и недостатки установки вещей в набор гемов @global в RVM?


Допустим, я хочу установить разные версии рельсов на одном сервере.Затем я хочу установить несколько приложений ruby ​​на одном сервере с минимальным дублированием файлов для экономии места на диске.Тем не менее, я все еще хочу избежать проблем с зависимостями, конфликтов с драгоценными камнями и других проблем.

Давайте также предположим, что у каждого приложения есть дополнительные драгоценные камни, которые ему нужны, которые я только хочу получить в своем локальном наборе гемов проекта.Будет ли мне лучше:

  1. Установка обоих Rails 3 и Rails 2 драгоценных камней в @global gemset
    • ... и использовать локальные наборы проектов для своих драгоценных камней ...
  2. Установка Rails 3 в @rails3 gemset и Rails 2 в @rails2 set ... затем клонирование для каждого нужного мне проекта?
    Например:
    • rvm use ree@rails3 && rvm gemset export rails3.gems
    • rvm use ree@rails2 && rvm gemset export rails2.gems
    • rvm use --create ree@project1-on-rails3 && rvm gemset import rails3.gems
      • Установить здесь больше локальных драгоценных камней проекта ...
    • rvm use --create ree@project2-on-rails2 && rvm gemset import rails2.gems
      • Установите здесь больше локальных драгоценных камней для проекта ...
  3. Что-то еще полностью ...

1 Ответ

3 голосов
/ 20 мая 2011

ПРИМЕЧАНИЕ. Я написал весь ответ, предполагая, что вы используете Bundler для управления своими гем-зависимостями. Я понимаю, что некоторые люди этого не делают, и вы не упомянули Бандлера в своем вопросе. Если вы не используете Bundler, я бы отметил, что это, вероятно, лучший способ экономии дискового пространства (хотя, если вы bundle install --system, хотя!). Если вы используете экспортированные наборы гемс для управления зависимостями, я думаю, что ваша схема звучит разумно, но у меня нет опыта работы с ней.


Как Rails 3, так и Rails 2 с Bundler установят свой путь загрузки соответствующим образом, чтобы они не загружали какие-либо драгоценные камни (или любые версии любых драгоценных камней), которых нет в Gemfile.lock. На самом деле я не сталкивался с проблемой зависимости от гемов на сервере. Важно, чтобы вы запускали bundle install на своем компьютере разработчика всякий раз, когда вы изменяете Gemfile, и вы проверяете Gemfile.lock в управлении исходным кодом, как описано на домашней странице Bundler .

Я потратил некоторое время, копаясь в сценариях использования наборов гемов назад в январе . Причины, по которым я обнаружил использование отдельных наборов гемс для каждого проекта:

  1. Ваша оболочка такая же, как и ваша прикладная среда (скрипты работают без bundle exec).
  2. Вы можете легко просматривать и просматривать исходный код всех ваших зависимостей, перейдя в каталог установки gemset.
  3. По словам автора RVM, он предотвращает некоторые сообщения о "гейзенгах". Я испытал нечто подобное, когда исполняемый файл gem не был доступен, и bundle exec, похоже, не помогло.

Я не думаю, что какое-либо из этих преимуществ на сервере очень выгодно, поэтому, если вы хотите сэкономить место на диске, я не уверен, зачем вообще использовать gemsets.

На самом деле единственная причина, по которой я вообще использовал rvm на сервере, заключалась в том, что это был удобный способ создания ruby ​​из исходного кода (нам была нужна версия, которая не была доступна в собственном менеджере пакетов).

...