Проблема с установкой бандлера, говорит, что устанавливает, но на самом деле не устанавливает

Я устанавливаю новую систему. Я использую rbenv вместо rvm, потому что rvm изменяет определение «cd», а это просто зло.

У меня установлена ​​необходимая версия ruby ​​и rails (я думаю), но упаковщик вызывает проблемы:

turlingdrome$ gem install bundler
ERROR:  While executing gem ... (Errno::EACCES)
    Permission denied @ rb_sysopen - /Users/brianp/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/bundler-2.0.1/CHANGELOG.md

turlingdrome$ sudo gem install bundler
/usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash/rubygems_plugin.rb:6: warning: Insecure world writable dir /Users/brianp/work in PATH, mode 040777
Successfully installed bundler-2.0.1
Parsing documentation for bundler-2.0.1
Done installing documentation for bundler after 3 seconds
1 gem installed

turlingdrome$ sudo gem uninstall bundler
Gem 'bundler' is not installed

turlingdrome$ bundler install
Traceback (most recent call last):
    2: from /Users/brianp/.rbenv/versions/2.5.3/bin/bundler:23:in `<main>'
    1: from /Users/brianp/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path'
/Users/brianp/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundler (Gem::GemNotFoundException)

Итак, я однажды попытался использовать sudo, и теперь я думаю, что права суперпользователя... поэтому я использую sudo. ничего страшного.

Установка вроде работает.

При попытке удалить пишет, что не установлено.

Когда я пытаюсь запустить его, он находит исполняемый файл, но затем говорит, что не может найти исполняемый файл.

Я использую рубин 2.5.3 и рельсы (кажется) 5.2.3.

Rails падает с:

turlingdrome$ rails -v
/Users/brianp/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/railties-5.2.3/lib/rails/app_loader.rb:53: warning: Insecure world writable dir /Users/brianp/work in PATH, mode 040777
Traceback (most recent call last):
    4: from bin/rails:3:in `<main>'
    3: from bin/rails:3:in `require_relative'
    2: from /Users/brianp/work/online-reporting/config/boot.rb:6:in `<top (required)>'
    1: from /Users/brianp/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/Users/brianp/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such file -- bundler/setup (LoadError)

что я предполагаю, это та же проблема.

Если это имеет значение, я на Mac.

🤔 А знаете ли вы, что...
Rails включает в себя генераторы кода, которые позволяют быстро создавать структуру приложения и его компоненты.


1
1 603
6

Ответы:

Использование rbenv — хороший выбор для управления установкой ruby на Mac, но, похоже, вы попали в полный беспорядок из-за неработающей rbenv/gem/rails/bundler установки и разрешений. Это не стоит исправлять, поэтому я предлагаю просто избавиться от rbenv, удалить каталог ~/.rbenv и установить rbenv с brew снова, используя это руководство.

Другие способы проверки:

  1. Беги rbenv-doctor

    curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash

  2. Удалите каталог ~/.rbenv, снова запустите rbenv init и установите нужную версию Ruby.

  3. Убедитесь, что which ruby и which gem указывают на соответствующее место внутри каталога ~/.rbenv.

Что следует отметить:

  1. rbenv и brew, а также gem не требуют sudo, поэтому с ними ни в коем случае нельзя использовать
  2. Не забудьте добавить eval "$(rbenv init -)" в сценарий инициализации вашей оболочки, например. echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

Можешь попробовать?

gem install bundler --user-install

Кажется, проблема с правами доступа к папке.

permission denied @ rb_sysopen -
/Users/brianp/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/bundler-2.0.1/CHANGELOG.md

Я бы попробовал изменить права доступа к указанному файлу/папке с помощью chmod 755 /Users/brianp/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/

Есть несколько сообщений, посвященных аналогичной теме, например. это.


warning: Insecure world writable dir /Users/brianp/work in PATH, mode 040777

Похоже проблема с правами доступа. Попробуй это:

sudo chmod 755 /Users/brianp/work

Решено

rbenv works by inserting a directory of shims at the front of your PATH:

~/.rbenv/shims:/usr/local/bin:/usr/bin:/bin

Through a process called rehashing, rbenv maintains shims in that directory to match every Ruby command across every installed version of Ruby—irb, gem, rake, rails, ruby, and so on.

Shims are lightweight executables that simply pass your command along to rbenv. So with rbenv installed, when you run, say, rake, your operating system will do the following:

  • Search your PATH for an executable file named rake
  • Find the rbenv shim named rake at the beginning of your PATH
  • Run the shim named rake, which in turn passes the command along to rbenv

Вы испортили свою rbenv установку.

1) Удалить установку ruby ​​вне rbenv

2) rvm implode

3) Очистите переменную $PATH env от ~/.bash_profile или ~/.bashrc

Удалите любую ссылку $PATH, указывающую на ruby, irb, gem или любую папку, включая исполняемый файл bin. Подумайте о том, чтобы прокомментировать любое $PATH утверждение из вашего bash_profile

# export PATH = "$HOME/etc/bin:$PATH"
# leave the statement below 
# export PATH = "$HOME/.rbenv/bin:$PATH

Переменная $PATH включает в себя список папок:

echo $PATH
home/fabrizio/.rbenv/shims:/opt/android-studio/bin:~/.scripts/bin

если вы запустите gem в своем терминале

любой исполняемый файл .bin, включенный в home/fabrizio/.rbenv/shims или /opt/android-studio/bin, может выполняться из любого места в терминале. Когда вы запускаете gem, выполняется команда ruby драгоценного камня, а не перехватывается из rbenv, потому что вы установили ruby ​​вне rbenv.

ОБНОВЛЕНИЕ НА ОСНОВЕ ВАШЕГО ОТЗЫВА

Вы должны были выполнить этот шаг при установке ruby ​​2.5.0 без rbenv., поэтому удалите из ~/.bash_profile или ~/.bashrc следующую строку

PATH = "$PATH:$(ruby -e 'puts Gem.user_dir')/bin"

или любую другую строку, которая добавляет /Users/brianp/.gem/ruby/2.5.0/bin к вашему $PATH, затем удалить рубин с помощью apt.

Прочтите следующую информацию, дополнительно всегда проверяйте место установки гемов с помощью gem env:

$ gem env home
# => ~/.rbenv/versions/<ruby-version>/lib/ruby/gems/...

если местоположение из любой точки терминала не находится под ~/.rbenv/, то вы устанавливаете драгоценные камни не в те места.

КРАЙНЕЕ СРЕДСТВО

Удалите папку с драгоценными камнями с помощью rm -rf ~/.gem, аналогичный подход к этому посту если не можете убрать /Users/brianp/.gem/ruby/2.5.0/bin из своего $PATH

РЕШЕНИЕ ПОСЛЕДНЕЙ ОШИБКИ

Эта ошибка вызвана установкой bundler 2.0

  can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)

нужно удалить bundler 2.0 и установить 1.9.0


Попробуйте удалить Gemfile.lockи попробуйте снова установить и использовать бандлер — я только что нашел это на Github:

Bundler 2 introduced a new feature that will automatically switch between Bundler v1 and v2 based on the lockfile [...] If you do, it can be fixed by installing the version of Bundler that is declared in the lockfile. This bug was fixed in RubyGems 3.0.0 but backports are now being prepared for previous major versions of RubyGems. We’ll let you know when they become available.