Ошибки Bundler в среде с установленным гемом Rails 3.1 - PullRequest
1 голос
/ 09 ноября 2011

У меня установлены Rails 3.0.10 и 3.1, потому что я пытаюсь использовать оба для двух разных проектов.

В моем проекте Rails 3.0.10 в верхней части моего Gemfile есть следующее:

gem 'rails', '3.0.10'

Однако после запуска bundle install; bundle exec rails --version я получаю следующее:

/Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/runtime.rb:31:in `setup': You have already activated activesupport 3.1.1, but your Gemfile requires activesupport 3.0.10. Using bundle exec may solve this. (Gem::LoadError)
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/runtime.rb:17:in `setup'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler.rb:110:in `setup'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/cli.rb:340:in `exec'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor/task.rb:22:in `send'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor/task.rb:22:in `run'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor.rb:263:in `dispatch'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor/base.rb:386:in `start'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/bin/bundle:13
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/bin/bundle:19:in `load'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/bin/bundle:19

Есть идеи?Очевидно, я уже использую bundle exec и bundle show rails; bundle show activesupport, чтобы подтвердить, что я должен использовать правильные версии драгоценных камней.Мне просто нужно удалить Rails 3.1?

Ответы [ 4 ]

3 голосов
/ 18 ноября 2011

Я столкнулся с той же проблемой.

Даже когда я явно указываю версию activesupport для использования в моем Gemfile:

gem 'rails', '3.2.9'
gem 'activesupport', '3.2.9'

это все еще дает мне эту ошибку, когда я запускаю bundle exec rails s:

/home/tyler/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.0.18/lib/bundler/runtime.rb:31:in `block in setup':
You have already activated activesupport 3.2.10, but your Gemfile requires activesupport 3.2.9. Consider using bundle exec. (Gem::LoadError)

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

Так что даже создание отдельного набора gemset для моего приложения (что мы обычно делаем в любом случае) не решает проблему, потому что набор gemset был «загрязнен» самим этим приложением (путем временной установки/ используя Rails 3.2.10 до возвращения к Rails 3.2.9), а не каким-либо другим приложением!

Единственное решение, которое я нашел до сих пор , - удаление более новая версия, которую вы не хотите использовать:

gem uninstall activesupport -v 3.2.10

Кажется, что это либо ошибка в Bundler, либо ошибка в Rails (если она делает что-то, что приводит к загрузке activesupport/ активируется до загружается Bundler, тогда мы не можемдействительно виноват в этом Bundler ...).

Еще одно столь же ужасное решение: Чтобы временно отключить более новую версию гема без удаления это, вы можете отредактировать файл спецификации драгоценного камня (например, /home/tyler/.rvm/gems/ruby-1.9.3-p194/specifications/activesupport-3.2.10.gemspec) и добавить строку raise 'disabled' вверху.Bundler пропустит загрузку activesupport 3.2.10 (после восстановления и распечатки ошибки) и перейдет к загрузке следующей наивысшей версии activesupport, которую он сможет найти (activesupport 3.2.9).

Когда вы будете готовычтобы снова включить activesupport 3.2.10, просто удалите raise.

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

1 голос
/ 18 марта 2012

В моем файле gem я изменил версию rails на мою текущую версию:

gem 'rails', '3.2.2'

Я выполнил команду: обновление пакета

И ошибка исчезает

0 голосов
/ 18 ноября 2011

Это может быть не по теме, но , пожалуйста, используйте Ruby Version Manager (RVM).

Это позволит вам управлять несколькими установками версии ruby, а также так называемыми наборами драгоценных камней , которые позволят вам поддерживать глобальные репозитории для всех ваших драгоценных камней (версии diff для каждого драгоценного камня) и устанавливать, какую из них Вы хотите использовать в любое время.

Помимо всего этого, посмотрите, как очистить установленные драгоценные камни и начать все заново:

gem clean -d # dry mode will simply tell you what will get cleaned

gem clean -v # will remove all older versions of every single gem

Кроме этого, вы можете принудительно удалить драгоценный камень rails вместе с его зависимостями (вы можете проверить, какие зависимости есть у вашей версии rails)

gem uninstall actionmailer actionpack activerecord activesupport acriveresource rails -v=3.1.0

Надеюсь, это поможет. Ура!

0 голосов
/ 09 ноября 2011

Создайте файл '.rvmrc' в каждом каталоге RAILS_ROOT (так в корне каждого проекта)

заполните:

vm_install_on_use_flag=1
rvm_gemset_create_on_use_flag=1
rvm use ruby-1.9.2-p290@APPNAME

где APPNAME отличается для каждого приложения. CD из приложения dir, а затем обратно. Когда вы CD, скажите «да», чтобы доверять Gem Set. Затем запустите Bundle install в каждом.

Вы создали 2 набора гемов, по одному для каждого проекта, поэтому нет перекрестного опыления приложений. Это должно исправить проблемы.

...