Как я могу заставить RVM учитывать настройки моего упаковщика в отношении того, куда помещать драгоценные камни?

Мой упаковщик настроен на установку драгоценных камней в каталог .bundle/ внутри каждого проекта.

$ cat ~/.bundle/config
---
BUNDLE_PATH: ".bundle"
BUNDLE_BIN: ".bundle/bin"

Как я могу заставить RVM учитывать этот параметр и не устанавливать $GEM_HOME в другой каталог (внутри ~/.rvm/) всякий раз, когда я cd вхожу в свой проект?

До сих пор у меня был небольшой скрипт, который устанавливал $GEM_HOME ( и $PATH и $GEM_PATH) всякий раз, когда я хотел бы cd внутри каталога моего проекта, но с последними версиями rvm он перестал работать, и теперь RVM в основном сбрасывает версию Ruby всякий раз, когда я вручную меняю $GEM_HOME, и я понятия не имею, как заставить его снова работать.


person Paweł Gościcki    schedule 02.10.2014    source источник
comment
В чем проблема с установкой драгоценных камней в .bundle и запуском исполняемого файла из папки bin/? Например, я могу запустить исполняемый файл с bundle exec bin/exec   -  person Малъ Скрылевъ    schedule 05.10.2014
comment
Проблема в том, что RVM устанавливает $GEM_HOME на что-то в ~/.rvm/, поэтому я не могу делать такие вещи, как gem cleanup или gem install, потому что драгоценные камни находятся в другом месте.   -  person Paweł Gościcki    schedule 06.10.2014
comment
вы можете запустить гем через сам упаковщик, так что: bundle exec gem ..., поэтому даже добавьте псевдоним alias gem=bundle exec gem или получите функцию, чтобы проверить, управляет ли пакет папкой гем/проекта, и запустите gem или bundle exec gem для выбранного случая.   -  person Малъ Скрылевъ    schedule 07.10.2014
comment
Я не думаю, что ты понимаешь. Я использую описанную выше настройку для всех своих проектов. Я больше никогда не запускаю bundle exec.   -  person Paweł Gościcki    schedule 07.10.2014
comment
Что вы используете тогда? bundle install, а что еще?   -  person Малъ Скрылевъ    schedule 07.10.2014
comment
Я добавляю ~/bin и ~/bundle/bin в свой путь, поэтому у меня есть прямой доступ ко всем бинарным файлам gem для любого проекта.   -  person Paweł Gościcki    schedule 07.10.2014


Ответы (1)


Прежде всего, вы должны указать, что хотите использовать для своего проекта совершенно отдельный гемсет (считайте, что он называется myproject42):

$ cd myproject42 && rvm --rvmrc --create use 2.1.0@myproject42 --ignore-gemsets

rvmrc создаст файл конфигурации в вашей папке. Вы уже наполовину отделены от вселенной. Теперь вы хотите немного изменить этот файл, установив все, что хотите:

...
unset __hook

# my exports
export GEM_PATH=`pwd`
export GEM_HOME=`pwd`
...

cd туда и обратно в этот каталог. Это приведет к предупреждению:

You are using '.rvmrc', it requires trusting, it is slower and ...
[LINES SKIPPED]
************************
y[es], n[o], v[iew], c[ancel]> y
Using: /tmp/myproject42

Как только вы подтвердите, что знаете об этой модификации, набор драгоценных камней будет установлен на то, что вы хотели (в данном случае /tmp/myproject42). Вы можете убедиться, что:

$ rvm gemset dir
Warning! PATH is not properly set up, '/tmp/myproject42/bin' is not available,
[LINES SKIPPED]
/tmp/myproject42

Возможно, вы захотите сделать некоторую очистку, например, подавить эти предупреждения. Внутри этих предупреждений распечатаны «инструкции», они довольно просты, поэтому я оставил описание начального процесса «грязным», чтобы показать, как именно он будет работать на вашем компьютере.

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

person Aleksei Matiushkin    schedule 06.10.2014
comment
Я не пробовал, но даже если это работает, это слишком много ручной работы для настройки каждого нового проекта (т.е. это решение слишком громоздкое, оно не масштабируется). - person Paweł Gościcki; 07.10.2014
comment
echo 'export GEM_PATH=.bundler' > .rvmrc помогает, если вы искали хаки, как ваше предыдущее решение только для zsh. Я описал процесс, как это должно быть сделано с помощью rvm. - person Aleksei Matiushkin; 07.10.2014
comment
мудасобва предоставил ответ, который вы просили. Если это слишком много работы, то напишите сценарий или измените RVM. Это был хороший, информативный ответ. Это тоже был хороший вопрос. Голосую за обоих :) - person Ethan Barron; 09.10.2014
comment
Я пробовал «жесткий» способ, описанный в ответе, и, к сожалению, он не работает. Я закомментировал свои zsh-скрипты, но RVM не установит правильный Ruby, если GEM_HOME/GEM_PATH изменен в rvmrc, как описано, и если я использую rvm use 2.1.2 в .rvmrc, он устанавливает GEM_HOME/GEM_PATH обратно на что-то в ~. Я также пробовал быстрый взлом, но он не работает точно так же. - person Paweł Gościcki; 12.10.2014