«Установка пакета» в Rails 3 супер быстрая (занимает 1 секунду), но потом не было Rails? (используя rvm) - PullRequest
5 голосов
/ 08 сентября 2010

Я использую rvm, делая следующее:

rvm install ree    <--- (Ruby Enterprise Edition), or this can be 1.8.7 or 1.9.2
rvm ree
rvm gemset create 'proj'
cd path/to/proj
bundle install

поэтому Gemfile в этом проекте говорит:

gem 'rails', '3.0.0'

и bundle install супер быстрые, сообщающие

Using rails (3.0.0) 

но после этого, когда я наберу

$ rails -v
/Library/Ruby/Site/1.8/rubygems.rb:779:in `report_activate_error': Could not find RubyGem rails (>= 0) (Gem::LoadError)
    from /Library/Ruby/Site/1.8/rubygems.rb:214:in `activate'
    from /Library/Ruby/Site/1.8/rubygems.rb:1082:in `gem'
    from /usr/bin/rails:18

$ which rails
/usr/bin/rails

так bundle install не устанавливает рельсы как драгоценный камень? но если я наберу script/rails -v, это показывает, что 3.0.0

Ответы [ 2 ]

12 голосов
/ 08 сентября 2010

Это правильно. bundle install не будет устанавливать Rails как самоцвет в обычном смысле. Теперь, чтобы объяснить, почему.

Когда Bundler запускает установку, он устанавливает gems в каталог: ~/.bundle/<type-of-ruby>/<version>/gems. Это отличается от обычного способа их установки по системному пути. Когда гем установлен по системному пути, исполняемый файл становится доступным, потому что этот каталог находится в пути загрузки. Теперь это плохо , потому что вы можете иметь только один исполняемый файл на камень . У вас установлен SomeGem v2, но вы хотите использовать генератор из SomeGem v1? Жаль.

Bundler решает эту проблему, устанавливая их в вышеупомянутом месте и требуя только определенных версий драгоценных камней, которые ему нужны (указанные внутри Gemfile. Запустив просто rails, вы пытаетесь запустить system исполняемый файл (как в случае с gem install rails), а не как Bundler (предоставляется bundle install для проекта Rails).

Чтобы запустить тот, который устанавливает Bundler, вы должны запустить его как bundle exec rails в каталоге, который содержит Gemfile, который указывает любую версию Rails. Bundler загрузит определенную версию Rails, и теперь вы сможете запускать их бок о бок с единственным компромиссом - префиксом bundle exec к командам.

Лично я связал это с be и двумя символами до того, как некоторые команды, по моему мнению, являются достойным компромиссом для избежания Седьмого круга ада конфликта самоцветов.

0 голосов
/ 13 сентября 2010

ваша процедура кажется правильной (обязательно используйте только что созданный gemset, проверьте с помощью rvm info, сделайте rvm ree@proj, если он не говорит gemset: 'proj'), поэтому я высуну голову ипопробуйте предложение.Между прочим, rails отлично устанавливается вместе с bundler.

Я боролся с самоцветами системы странного поведения по сравнению с локальными самоцветами, как и многие пользователи-сборщики, в том числе Иегуда Кац, ведущий к этой всеобъемлющей публикации A Taleof Abort Traps

Короче говоря, если вы запустите пакетную установку до , у вас будет камень компоновщика (получая ошибку "стандартный" камень не найден), затем выполните команду gemустановить bundler , а затем установить еще один пакет, gem bundler был установлен в вашу систему , а не rvm .

Решение : Удалить .bundle, (а есть ли сборщик удалений gem?).Тогда я бы открыл новый термин, выполнил команду rvm ree @ proj и gem install bundler перед установкой пакета.

Иегуда говорит в посте, что это исправлено в новых версиях пакета, но я испытал это лишь несколькодней назад (bundler 1.0.0).Надеюсь, я принес больше помощи, чем путаницы к столу :)

...