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

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

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

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

поэтому вопросы:

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

4 ответов


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

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

похоже, что Bundler настроен для хранения их в локальном пути проекта, но вы ожидаете, что они будут в наборе драгоценных камней. 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.

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

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

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


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

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

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

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

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

Как выглядит "gem env"? Также "bundle env"?


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

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

/ пользователи / YOURUSER/.rvm / environments / ruby - {версия}\@yourgemset/bundler / драгоценные камни

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

gem 'somegem', custom_git:' gituser/repo'

подсвечивается и предупреждение "Gem x не может быть найдено... в SDK'

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

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

  1. vim ~/.РВМ/среды/Рубин-{ваша-версия-здесь}\@{ваш-gemset}
  2. добавить Bundler gems путь к записи GEM_PATH

    экспорт GEM_PATH= ' /Users/YOURUSER/.РВМ/драгоценные камни/рубин-{версия}@yourgemset/упаковщик/драгоценные камни:{в отдых}'

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

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


надеюсь, это поможет! Дайте мне знать, если я должен что-то прояснить (happy NYE)