Gemfile.lock имеет другую версию Rake в среде развертывания - PullRequest
0 голосов
/ 10 февраля 2012

Короче говоря, сообщение об ошибке выглядит следующим образом:

$ bundle install
rake aborted!
You have already activated rake 0.9.2.2, but your Gemfile requires rake 0.9.2. Using bundle exec may solve this.

А вот объяснение этой ошибки:

  • установлено rake 0.9.2.2 1008 *
  • приложение Gemfile не имеет требуемого номера версии для rake
  • В среде разработки разработчика установлено rake 0.9.2, и этот номер версии находится в Gemfile.lock файле
  • на сервере развертывания установлено несколько приложений rails
  • эти приложения написаны разными программистами
  • у этих программистов разные версии граблей, установленные в их среде разработки
  • У некоторых из них rake 0.9.2, а у других rake 0.9.2.2
  • Прочитав Иегуда Кац "Разъяснение ролей .gemspec и Gemfile" , Gemfile.lock находится в нашей подрывной деятельности

Возможные решения:

  • Сообщение об ошибке можно избежать, запустив bundle exec rake install затем bundle update
  • Сообщение об ошибке можно избежать, если мы попросим всех разработчиков указать одинаковую версию рейка в Gemfile
  • попросить всех разработчиков использовать одну и ту же версию рейка

Мой вопрос: это правильное решение здесь? или есть правильные решения?

Я до сих пор не уверен, что файл Gemfile.lock должен быть в subversion.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

Вы обязательно должны проверить свой Gemfile.lock. Он содержит версии вашего драгоценного камня, который, как вы знаете, будет работать с вашим приложением. Поэтому, когда вы комплектуете инсталляцию в другой среде, вы знаете, что она должна работать.

Скажем, через несколько месяцев кто-то делает установку пакета без Gemfile.lock. Они получат самую последнюю версию драгоценных камней в вашем Gemfile (по крайней мере, с указанной версией), и не будет никакой гарантии, что ваше приложение будет работать даже с этими драгоценными камнями. С Gemfile.lock должна быть некоторая уверенность в том, что ваше приложение должно работать, поскольку любой, кто работал с ним или проводил на нем тесты, должен был иметь его в переходном состоянии с этими замороженными версиями gem.

Чтобы решить вашу проблему, я бы сделал:

bundle update rake

и затем зафиксируйте Gemfile и Gemfile.lock. Таким образом, вы говорите всем, кто запускает ваше приложение, что вы должны использовать 0.9.2.2 рейка. Эта версия рейка, которую вы знаете, будет работать с вашим приложением, и ваши тесты будут выполняться с этой версией.

Чтобы запустить правильную версию, у вас есть несколько вариантов:

  • комплектация exec:

    $ bundle exec rake -T
    

Добавление псевдонима к вашему .bash_profile, .zshrc или .profile также может помочь:

# in .bash_profile
alias b="bundle exec"
$ b rake -T
  • связка binstubs

    # in your .bash_profile
    export PATH="./.bin:$PATH"
    $ bundle install --binstubs
    

Это установит двоичные файлы вашего Gemfile в каталог ./bin, и изменение пути заставит вашу оболочку сначала зарегистрироваться ./bin, прежде чем искать в rvm или в ваших двоичных файлах установки gem. Не забудьте добавить 'bin' в ваш файл .gitignore, если вы сделаете это.

  • rubygems-bundler гем. Этот драгоценный камень генерирует оболочки, которые пытаются определить, когда использовать для вас bundle exec.
1 голос
/ 10 февраля 2012

Потеря производительности, которую ваша команда испытает, пытаясь удержать всех на одной и той же версии rake (2-е и 3-е решения), а управление всеми последующими конфликтами может быть очень высоким. Это также повысит уровень разочарования разработчиков, когда им нужно использовать gem / script / module XYZ, но есть проблема с XYZ и обязательной версией rake.

Пока принимаются меры для обеспечения эффективного выполнения команд bundle в вашей среде, Решение 1 будет оказывать гораздо меньшее негативное влияние на производительность ваших команд. ИМХО.

...