Rbenv: `yarn` shim не может найти установленную `yarn`

Созданный на 28 нояб. 2017  ·  18Комментарии  ·  Источник: rbenv/rbenv

У меня была эта проблема немного. Кажется, что 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

Все 18 Комментарий

Прокладка 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

selection_029

@варубой

Но я просто хочу убедиться, что это ожидается. Когда я запускаю команду which yarn в каталоге, отличном от ruby/non-bundler, он все равно будет указывать на прокладки rbenv.

Да, это ожидаемое поведение. Однако вы заметите, что если вы запустите rbenv which yarn , пряжа будет указывать на вашу системную пряжу (если она есть) или иным образом пряжу из nenv или аналогичного менеджера среды.

@madumlao понял и подтвердил! Спасибо за ваше любезное объяснение

Была ли эта страница полезной?
0 / 5 - 0 рейтинги