Как заставить стойку обходить обычную ошибку «Вы уже активировали стойку ...»? - PullRequest
25 голосов
/ 11 февраля 2012

Это общий вопрос, но ни один из ответов, похоже, не решает проблему.Я получаю обычное: You have already activated rack 1.4.1, but your Gemfile requires rack 1.3.6. Using bundle exec may solve this.

Очистка файла Gemlock ничего не сделала, а запуск bundle install снова ничего не сделал ... запуск bundle install --binstubs не решил проблему как "run ./bin/ {rake |rails | etc} из корня вашего приложения "просто вызвало больше ошибок.Есть ли способ обойти эту очевидную проблему?

Ответы [ 6 ]

33 голосов
/ 11 февраля 2012

Проблема заключается в следующем:

  • У вас установлено (как минимум) две версии Rack.

  • Ваш Gemfile требует одну версию(1.3.6).Ваша текущая среда предоставляет другую версию (1.4.1).

  • К тому времени, как ваше приложение выполнится, текущая среда уже загружена 1.4.1.

  • Bundler знает, что вам нужно загрузить 1.3.6, но он не может его загрузить.Вы не можете загружать более одной версии одного и того же камня, поэтому версия 1.4.1 выигрывает, так как она была загружена первой.

  • Bundler жалуется вам.

Удалите проблемные камни (например, gem uninstall rack -v 1.3.6).Более того, используйте RVM и наборы гемов, чтобы лучше изолировать ваши гемы, и вы не столкнетесь с этой проблемой.

1 голос
/ 05 апреля 2012

У меня была такая же проблема при попытке развернуть производственное приложение. Я использую rbenv для управления средой ruby, установленной по умолчанию в rbenv. Зависимости gem, перечисленные в Gemfile, устанавливаются компоновщиком. Случается, что это было причиной проблемы.

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

Если вы используете RVM, проблема возникает, если вы определяете драгоценный камень в глобальной среде, которая зависит от стойки, так же, как это делает единорог, а затем определяете набор драгоценностей для каждого проекта. Я думаю, что это из-за зависимостей рельсов 3.1 (хотя я не уверен). Решение состоит в том, чтобы удалить единорога (или драгоценный камень, который устанавливает стойку 1.4.1) из глобального набора гемов и установить его в наборе гемов для каждого проекта.

Если вы используете bundler и RVM, у вас есть два варианта: - создать набор с рельсами и набор для установки стойки 1.4.1 (лучше всего подходит для рабочих станций разработчиков) - поместите драгоценный камень, который зависит от стойки 1.4.1, в Gemfile и дайте упаковщику волшебство.

0 голосов
/ 07 марта 2016

Иногда все, что вам нужно сделать, это просто установить гем.

У меня была эта проблема на openshift и я перешел в каталог проекта:

$ rhc ssh APP_NAME

$ cd app-root

$ gem install GEM_NAME

после этого приложение запустилось нормально.

0 голосов
/ 20 декабря 2015

Если то же самое сообщение об ошибке, касающееся Spring, привело вас сюда, то есть вы получаете сообщение, подобное этому:

Вы уже активировали пружину 1.4.0, но для вашего Gemfile требуется пружина 1.3.6.

Решение совпадает с принятым ответом:

gem uninstall spring -v 1.4.0
0 голосов
/ 30 июля 2013

Эта проблема также распространена, когда вы клонируете проект из репозитория (например, github), потому что он может уже иметь Gemsfile.lock. Таким образом, драгоценные камни, которые он имеет, могут отличаться от тех, которые уже загружены вашей средой. Итак, сначала получает резервную копию вашего Gemsfile.lock, затем удаляет его и запускает пакетную установку - без производства. Он установит все ваши зависимости в соответствии с GemFile. Имейте в виду, что если приложение старое, оно может не работать со средой на вашем компьютере.

0 голосов
/ 04 апреля 2012

Откройте Gemfile.lock, найдите запись для стойки (1.3.6) и удалите ее.

...