Часть гемов в rails не собирается
Создал новый, чистый проект Rails, по пытался установить туда devise и на шаге генерации:
rails g devise:install
Получаю кучу предупреждений об установленных, но не собранных гемах и сообщение об ошибке из-за их, якобы, отсутствия:
Ignoring bcrypt-3.1.18 because its extensions are not built. Try: gem pristine bcrypt --version 3.1.18
Ignoring bindex-0.8.1 because its extensions are not built. Try: gem pristine bindex --version 0.8.1
Ignoring bootsnap-1.13.0 because its extensions are not built. Try: gem pristine bootsnap --version 1.13.0
Ignoring debug-1.6.2 because its extensions are not built. Try: gem pristine debug --version 1.6.2
Ignoring ffi-1.15.5 because its extensions are not built. Try: gem pristine ffi --version 1.15.5
Ignoring msgpack-1.5.6 because its extensions are not built. Try: gem pristine msgpack --version 1.5.6
Ignoring puma-5.6.5 because its extensions are not built. Try: gem pristine puma --version 5.6.5
Ignoring sqlite3-1.4.4 because its extensions are not built. Try: gem pristine sqlite3 --version 1.4.4
Ignoring strscan-3.0.4 because its extensions are not built. Try: gem pristine strscan --version 3.0.4
Ignoring bcrypt-3.1.18 because its extensions are not built. Try: gem pristine bcrypt --version 3.1.18
Ignoring bindex-0.8.1 because its extensions are not built. Try: gem pristine bindex --version 0.8.1
Ignoring bootsnap-1.13.0 because its extensions are not built. Try: gem pristine bootsnap --version 1.13.0
Ignoring debug-1.6.2 because its extensions are not built. Try: gem pristine debug --version 1.6.2
Ignoring ffi-1.15.5 because its extensions are not built. Try: gem pristine ffi --version 1.15.5
Ignoring msgpack-1.5.6 because its extensions are not built. Try: gem pristine msgpack --version 1.5.6
Ignoring puma-5.6.5 because its extensions are not built. Try: gem pristine puma --version 5.6.5
Ignoring sqlite3-1.4.4 because its extensions are not built. Try: gem pristine sqlite3 --version 1.4.4
Ignoring strscan-3.0.4 because its extensions are not built. Try: gem pristine strscan --version 3.0.4
Could not find sqlite3-1.4.4, puma-5.6.5, bootsnap-1.13.0, debug-1.6.2, msgpack-1.5.6, ffi-1.15.5, bindex-0.8.1, bcrypt-3.1.18, strscan-3.0.4 in any of the sources
Run
bundle installto install missing gems.
Пытаюсь исправить:
gem pristine --all
Ругается на отсутствие прав:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /usr/share/gems directory.
Повторяю от имени суперпользователя:
sudo gem pristine --all
Команда срабатывает, но не помогает. То же самое при использовании рекомендуемых команд, вроде:
gem pristine bcrypt --version 3.1.18
Срабатывают только от имени супераользователя и не дают никакого эффекта. Попробовал:
sudo rails g devise:install
Но, похоже, Rails стоит локально и из-под рута недоступен:
sudo: rails: command not found
С чем может быть проблема и как её поправить?
Ответы (1 шт):
Перед выполнением команды
bundle install
Надо задать путь для установки гемов:
bundle config set --local path 'vendor/bundle'
Если этого не сделать, то часть гемов ставятся глобально и это вызывает проблемы при выполнении скриптов генератора, который их не видит.
Об этом показывается предупреждение при установке, но так как оно никак не выделяется на фоне общего полотна текста, то его легко пропустить.
При создании нового проекта с помощью rails new projectname bundle install будет выполнен автоматически, но в какой-то момент потребует от вас ввести пароль администратора. Если это произошло, то не вводите пароль, прервите выполнение скрипта с помощью Ctrl+C, перейдите в директорию созданного проекта и уже там задайте путь для установки гемов с помощью команды выше. Затем запустите bundle install вручную. Если у вас всё настроено правильно, то скрипт установки успешно закончит работу не требуя пароля.