Использование RVM Gemsets, Bundler и RubyMine

Я использую RVM для управления версиями Ruby.
В своем проекте я использую Bundler для управления гемами проекта.

У RVM также есть гемсеты.
Гем в гемсете не имеет связи с гемом Бандлера. ← Верно ли это?
Я пришел к такому выводу, потому что файлы gem хранятся в разных местах:
RVM gemset: ~/.rvm/gems/ruby-2.0.0-p247@myApp
Bundler: [my_app_dir]/vendor/bundle/gems
> Таким образом, приложение использует драгоценные камни Bundler, а не драгоценные камни RVM.

Но когда я добавляю драгоценный камень в свой Gemfile, RubyMine IDE показывает мне предупреждение, что этого драгоценного камня нет в наборе драгоценных камней RVM. Поэтому я также добавляю этот гем в гемсет RVM (просто чтобы избавиться от этого предупреждения).

Итак, вопросы:

  1. Есть ли веская причина добавлять драгоценные камни в оба места (RVM Gemset и Gemfile)?
  2. Если нет, то почему RubyMine предупреждает меня об этом?

person Alex Fedoseev    schedule 28.07.2013    source источник


Ответы (4)


  1. Есть ли веская причина добавлять драгоценные камни в оба места (RVM Gemset и Gemfile)?

Набор драгоценных камней не является обязательным, Gemfile — это идеальное место для объявления ваших зависимостей. Где вы храните эти драгоценные камни, зависит от вас.

Похоже, что Bundler настроен на сохранение их в локальном пути проекта, но вы ожидаете, что они будут в наборе драгоценных камней. Бандлер получил эту конфигурацию, запустив bundle install --path vendor/bundle/gems в какой-то момент. Он сохраняет эту конфигурацию в файле конфигурации проекта по адресу project_dir/.bundle/config:

BUNDLE_PATH: vendor/bundle/gems

Я не знаком с Rubymine, но если вы запускаете сервер Rails с помощью Bundler (т.е. bundle exec rails server), вы можете игнорировать это предупреждение. Bundler правильно загрузит гемы, перечисленные в Gemfile.

Если вы хотите использовать набор драгоценных камней вместо кеша Bundler, вы можете просто удалить эту строку из файла конфигурации Bundler и переустановить свои драгоценные камни с помощью bundle install.

  1. Если нет, то почему RubyMine предупреждает меня об этом?

Я предполагаю, что Rubymine не читает конфигурацию проекта Bundler (в project_path/.bundle/config) и не понимает, где установлены гемы.

person Adam Stegman    schedule 28.07.2013
comment
Удалено BUNDLE_PATH: vendor/bundle/gems. Теперь драгоценные камни установлены в правильном каталоге. Спасибо! - person Alex Fedoseev; 28.07.2013
comment
Нужны ли нам как наборы драгоценных камней, так и упаковщик для управления драгоценными камнями? - person Ankit Dhingra; 15.05.2014
comment
@AnkitDhingra Нет, наборы драгоценных камней не требуются для управления драгоценными камнями. Bundler загрузит для вас правильные зависимости, если вы используете bundle exec перед любой командой. - person Adam Stegman; 17.05.2014

Вы (или, если вы работаете в команде, кто-то из вашей команды) однажды выполнили bundle install и указали папку установки. В вашем случае vendor/bundle/gems. Bundle запоминает этот параметр, и все последующие вызовы команды bundle будут использовать тот же путь.

Для этого есть веская причина: папка вашего приложения будет содержать все требования и ее будет легче распространять (например).

Теперь, если вы хотите, чтобы этот пакет устанавливал ваши драгоценные камни в обычные места, вы можете сделать следующее:

  • запустите bundle install --system, который будет использовать расположение по умолчанию
  • в качестве альтернативы: пакет хранит свои настройки в файле конфигурации, я думаю, .bundle/config, и вы также можете проверить это. Обычно это не требуется, так как bundle install --system снова установит это правильно.
  • то можно смело удалять папку vendor/bundle/gems
person nathanvda    schedule 28.07.2013
comment
bundle install --system по-прежнему устанавливает его в vendor/bundle/gems, но помогло удаление BUNDLE_PATH: vendor/bundle/gems из .bundle/config. Спасибо! - person Alex Fedoseev; 28.07.2013

Нет, что-то не так, у вас ничего не должно быть в разделе vendor/bundle, все должно быть в ~/.rvm/gems/ruby-2.0.0-p247@myApp и, возможно, ~/.rvm/gems/ruby-2.0. 0-p247@global при условии, что ваш .rvmrc (или .ruby-версия) настроен правильно.

Как выглядит «драгоценный камень»? Также «комплект env»?

person Mike Summers    schedule 28.07.2013
comment
gem_env & bundle_env - person Alex Fedoseev; 28.07.2013
comment
Хорошо, это странно, Bundler показывает правильный гемпуть (/Users/Alex/.rvm/gems/ruby-2.0.0-p247@myBlog:/Users/Alex/.rvm/gems/ruby-2.0.0-p247@global ). Вы случайно не запускали пакет перед настройкой rvm? В противном случае это выглядит нормально. - person Mike Summers; 28.07.2013
comment
Кроме того, что показывает RubyMine как окружение драгоценных камней (Инструменты -> Показать окружение драгоценных камней)? - person Mike Summers; 28.07.2013
comment
Может быть. Я не помню, это мое первое приложение) - person Alex Fedoseev; 28.07.2013

Так что это заняло у меня 3 дня, так как ничто другое, что я здесь нашел, не помогало. Я также запускаю несколько проектов через RubyMine одновременно (и в разных версиях), поэтому установка GEM_PATH и запуск из командной строки для меня не работают. Я использую IntelliJ с плагином RM, это должно работать на автономном RM.

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

/Пользователи/ВАШ ПОЛЬЗОВАТЕЛЬ/.rvm/environments/ruby-{версия}\@yourgemset/bundler/gems

Одна вещь, которую я не смог исправить, находится в GEMFILE, у меня есть несколько пользовательских git_sources, и rubymine выделяет их и дает мне предупреждение о том, что не может найти драгоценный камень в моем комплекте (вы можете игнорировать это предупреждение; если драгоценный камень не вообще не устанавливать):

гем 'somegem', custom_git:'gituser/repo'

выделено, и предупреждение: «Gem x не может быть найден... в SDK»

Однако Bundler установил его, и ruby ​​может его загрузить.

# TLDR: шаги, чтобы RUBYMine находил дополнительные драгоценные камни и отображался во внешних библиотеках

  1. vim ~/.rvm/environments/ruby-{ваша-версия-здесь}\@{ваш-gemset}
  2. add the bundler gems path to GEM_PATH entry

    export GEM_PATH='/Users/YOURUSER/.rvm/gems/ruby-{version}@yourgemset/bundler/gems:{the rest}'

  3. сохранить файл
  4. Перезапустите RubyMine/IntelliJ, снова откройте проект (если он не открывается автоматически)
  5. Откройте диалоговое окно Project Structure > Platform SDKs > выберите GEMSET, с которым вы работаете.
  6. добавьте /Users/YOURUSER/.rvm/environments/ruby-{version}\@yourgemset/bundler/gems в свой путь к классам
  7. Нажмите OK, затем ПОВТОРНО ОТКРЫТЬ диалоговое окно Project Structure > Project Settings > Project.
  8. В вашем проекте, скорее всего, не будет SDK. Поэтому снова выберите тот, который вы используете, и нажмите OK.
  9. RM/IJ теперь будет переиндексировать файлы
  10. Готово, все сломанные/отсутствующие инспекционные ссылки теперь должны быть исправлены. И вы должны быть в состоянии заглянуть в свои драгоценные камни.

В приведенных выше инструкциях говорится, что когда вы запускаете установку пакета (из терминала или RM), он работает успешно, и что у вас правильно настроен RVM, а gemset уже создан.


Надеюсь, это поможет! Дайте мне знать, если я должен что-то уточнить (с Новым годом)

person Juan Bonfante    schedule 31.12.2014