У меня была эта проблема немного. Кажется, что rbenv не может понять, где находится yarn
. Я понимаю, что это зависимость от js, поэтому я не совсем уверен, почему rbenv даже хочет иметь для этого прокладку.
Я нахожусь в каталоге, который является проектом только для JS, поэтому нет .ruby-version
, у меня есть следующая конфигурация:
$ rbenv --version
rbenv 1.1.0
$ ruby --version
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin15]
$ brew list
...
yarn
...
$ which yarn
/Users/jon/.rbenv/shims/yarn
$ yarn -v
rbenv: yarn: command not found
$ brew list yarn
/usr/local/Cellar/yarn/1.2.1/bin/yarn
/usr/local/Cellar/yarn/1.2.1/bin/yarnpkg
/usr/local/Cellar/yarn/1.2.1/libexec/bin/ (5 files)
/usr/local/Cellar/yarn/1.2.1/libexec/lib/ (2 files)
/usr/local/Cellar/yarn/1.2.1/libexec/package.json
$ /usr/local/bin/yarn -v
1.2.1
Это также произошло в каталогах проектов ruby, где есть .ruby-version
, и я использую пряжу для веб-пакета и других вещей.
Есть идеи?
Прокладка yarn
была добавлена в rbenv, потому что в одной из версий Ruby по какой-то причине есть исполняемый файл yarn
. Чтобы удалить его, сделайте следующее в bash:
for ver in $(rbenv whence yarn); do
RBENV_VERSION="$ver" gem uninstall -ax yarn
rm -f "$(rbenv prefix "$ver")/bin/yarn"
done
rbenv rehash
# now check the yarn executable again:
which -a yarn
Это ничего не сделало для меня. Я еще немного покопался, и rbenv whence yarn
ничего мне не дал.
Это также ничего не дало мне, когда я был в каталоге ruby, который содержал драгоценный камень ( rails 5.1.0.rc
), в котором было yarn
. Так что я смущен тем, как это должно работать?
Поскольку я был в каталоге проекта без файла ruby-версии, используемые прокладки являются системными прокладками, верно?
В моем отчете выше явно используются прокладки из моего домашнего каталога /Users/jon/.rbenv/shims/
. Возможно ли, что когда-то в прошлом я установил драгоценный камень, который предоставлял yarn
, а затем удалил его (из глобального набора), но прокладка не была удалена?
Возможно ли, что когда-то в прошлом я установил драгоценный камень, который предоставлял
yarn
, а затем удалил его (из глобального набора), но прокладка не была удалена?
Это определенно возможно. Но если rbenv whence yarn
не возвращает никаких результатов, тогда yarn
должен автоматически исчезнуть из /Users/jon/.rbenv/shims/
при следующем rbenv rehash
(а также, по умолчанию, каждый раз вы создаете новый сеанс оболочки). Если только у вас нет плагинов rbenv, о которых я не знаю.
Спасибо за информацию. Я почти уверен, что это что-то с моей настройкой. Если найду решение, могу добавить примечания в тикет.
Если только у вас нет плагинов rbenv, о которых я не знаю.
Я тоже столкнулся с этой проблемой и проверил установленные плагины. Я удалил https://github.com/ianheggie/rbenv-binstubs и решил это.
Вы также можете скопировать ./bin/yarn
в ./bundle/bin/yarn
внутри вашего приложения rails и сохранить rbenv-binstubs
Вы также можете скопировать ./bin/yarn в ./bundle/bin/yarn внутри вашего приложения rails и сохранить rbenv-binstubs
В моей среде это происходит не только в каталоге проекта rails, но и в любом другом месте по всему миру.
@akashani62 у вас опечатка в вашем комментарии: это должно быть .bundle/bin/yarn
(без первой косой черты!).
Возможно ли, что я установил драгоценный камень, который предоставлял пряжу некоторое время назад, а затем удалил его (из глобального набора), но прокладка не была удалена?
Я столкнулся с чем-то подобным с другим исполняемым файлом. В одном из проектов, с которым я работаю, есть зависимость, добавляющая исполняемый файл в прокладки с таким же именем, как и у системного. Когда я переключаюсь с этого проекта на другой, использующий общесистемный исполняемый файл, я регулярно путаюсь в ошибках, пока не вспомню удалить прокладку. Не знаю, как это исправить, кроме работы над согласованностью между проектами, но это не всегда вариант.
Всем, кто хочет использовать rbenv-binstubs
и не хочет иметь дело с неправильными прокладками, пожалуйста, проверьте этот комментарий: https://github.com/ianheggie/rbenv-binstubs/issues/29#issuecomment -404487285
Это должно быть решено в madumlao/ rbenv-binstubs@335a8301295f568d8dea288726a28e04ad5660ac (главная ветка): rbenv-binstubs теперь будет только шиммировать/вставлять исполняемые файлы ruby.
Что бы это ни стоило, я смог решить эту проблему, запустив rm -rf /Users/$(whoami)/.rbenv/shims/yarn
. Не знаю, рекомендуется ли это, но я пробовал здесь все, и ничего не получилось.
@PatrickDePuydt , если ваши rbenv-binstubs не различают рубиновые и нерубиновые исполняемые файлы, пряжа снова будет подхвачена при следующем перефразировании.
Вы также можете скопировать
./bin/yarn
в./bundle/bin/yarn
внутри вашего приложения rails и сохранитьrbenv-binstubs
только это работает для меня.
Бег
bundle install --binstubs .bundle/bin
не работает
@madumlao у тебя есть какие-то идеи о том, как это так?
@waruboy , вы пытались принудительно установить rbenv rehash
и rehash
в своей оболочке после пакета? Возможно, ваша оболочка использовала старый путь после запуска bundle install --binstubs .bundle/bin
, и он не был обнаружен командой which.
В качестве обновления я также попробовал другой подход в madumlao/rbenv-binstubs/unshadow . Это также объединено в madumlao/rbenv-binstubs/master
rbenv-binstubs теперь будет активно «распаковывать», если ни один из binstub не указывает на какой-либо замаскированный исполняемый файл, таким образом, по умолчанию используются любые системные или определенные пользователем пути.
Это должно решить случай, когда пряжа, проложенная внутри пути проекта одного проекта ruby, приводит к разрыву пряжи везде (rbenv не будет использовать прокладку, если исполняемый файл пряжи, на который указывает прокладка, не существует). Однако внутри пути проекта этого рубинового проекта по-прежнему будет использоваться прокладка пряжи. Это не решает никаких проблем, вызванных поломкой этой прокладки пряжи (если она сломана).
@madumlao спасибо за ваш ответ. Я вытащил ваш последний мастер и он работает!
Но я просто хочу убедиться, что это ожидается. Когда я запускаю команду which yarn
в каталоге, отличном от ruby/non-bundler, он все равно будет указывать на прокладки rbenv:
taufiqm@taufiq-rig:~$ cd empty-dir/
taufiqm@taufiq-rig:~/empty-dir$ ls
taufiqm@taufiq-rig:~/empty-dir$ which yarn
/home/taufiqm/.rbenv/shims/yarn
taufiqm@taufiq-rig:~/empty-dir$ yarn -v
1.13.0
@варубой
Но я просто хочу убедиться, что это ожидается. Когда я запускаю команду
which yarn
в каталоге, отличном от ruby/non-bundler, он все равно будет указывать на прокладки rbenv.
Да, это ожидаемое поведение. Однако вы заметите, что если вы запустите rbenv which yarn
, пряжа будет указывать на вашу системную пряжу (если она есть) или иным образом пряжу из nenv
или аналогичного менеджера среды.
@madumlao понял и подтвердил! Спасибо за ваше любезное объяснение
Самый полезный комментарий
Прокладка
yarn
была добавлена в rbenv, потому что в одной из версий Ruby по какой-то причине есть исполняемый файлyarn
. Чтобы удалить его, сделайте следующее в bash: