Использование 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 (просто чтобы избавиться от этого предупреждения).
поэтому вопросы:
- есть ли веские причины добавлять драгоценные камни в обоих местах (RVM Gemset и Gemfile)?
- если нет, то почему RubyMine предупредив меня об этом?
4 ответов
- есть ли веские причины добавлять драгоценные камни в обоих местах (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
.
- если нет, то почему 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 найти дополнительные драгоценные камни, и появляются во внешних библиотеках
- vim ~/.РВМ/среды/Рубин-{ваша-версия-здесь}\@{ваш-gemset}
- добавить Bundler gems путь к записи GEM_PATH
экспорт GEM_PATH= ' /Users/YOURUSER/.РВМ/драгоценные камни/рубин-{версия}@yourgemset/упаковщик/драгоценные камни:{в отдых}'
- сохраните файл
- перезапустите RubyMine / IntelliJ, откройте проект (если он не открывается автоматически)
- открыть >
Platform SDKs
> выбрать GEMSET вы работаете с - добавить
/Users/YOURUSER/.rvm/environments/ruby-{version}\@yourgemset/bundler/gems
в вашем classpath - нажмите OK, затем откройте >
Project Settings
>Project
- ваш проект, скорее всего, не будет иметь SDK поэтому выберите тот, который вы используете снова и хит хорошо
- RM / IJ теперь будет переиндексировать файлы
- вы закончили, любые сломанные / отсутствующие инспекционные ссылки теперь должны быть исправлены. И ты должен уметь заглядывать в свои драгоценные камни.
в приведенных выше инструкциях, что при запуске bundle install (от терминала или RM) он работает успешно, и что у вас есть RVM правильно настроить, и gemset уже создан
надеюсь, это поможет! Дайте мне знать, если я должен что-то прояснить (happy NYE)