Как рубокопировать рельсы без `bundle exec`?

У меня есть приложение rails, работающее на ruby ​​​​2.7.2 со следующим в Gemfile:

group :development, :test do
  gem 'rubocop'
  gem 'rubocop-minitest'
  gem 'rubocop-performance'
  gem 'rubocop-rails'
end

Пробежали bundle install и bundle update. Каждый раз, когда я запускаю rubocop в каталоге, я получаю следующее:

Could not find 'activesupport' (>= 4.2.0) among 220 total gem(s)

Если я запускаю bundle exec rubocop, все работает нормально. Как я могу заставить это работать без части bundle exec? Я запускаю линтер в vim, который просто вызывает исполняемый файл без bundle exec, и поэтому я застрял.

Интересно, что у меня есть другое приложение на ruby ​​2.7.2 с такой же настройкой в ​​Gemfile, и оно отлично работает без префикса bundle exec.


person croceldon    schedule 05.11.2020    source источник
comment
проверить binstubs   -  person max pleaner    schedule 05.11.2020
comment
Я попробовал bundle binstubs bundler --force, который был необходим, чтобы заставить его работать, и теперь я могу сделать bin/rubocop, но это все еще не приводит меня к тому, чего я хочу, а именно к непосредственному использованию rubocop.   -  person croceldon    schedule 05.11.2020


Ответы (2)


Я считаю, что Rubocop ведет себя так, как ожидалось, и что проблема заключается в том, как ваш линтер вызывает Rubocop.

Поскольку Rubocop устанавливается через Bundler, перед ним нужно будет добавить bundle exec, чтобы запустить локальную версию. Вам нужно указать плагину, чтобы он запускал команду bundle exec rubocop, а не rubocop.

Вы не упомянули, какой линтер Vim вы используете, но выбрав в качестве примера популярную опцию ALE, вы можете использовать следующую настройку для переопределения вызываемой команды по умолчанию:

g:ale_ruby_rubocop_executable = 'bundle'

В ALE этот параметр спрятан в Ruby. документации, а дополнительная информация содержится в этой проблеме GitHub.

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

person Dave Powers    schedule 18.01.2021

bundle exec — это команда, отвечающая за запуск определенного гема внутри вашего Gemfile (у которого есть определенная версия).

Без этого вы будете запускать системный рубокоп (то есть другую версию) и ваш проект тоже не будет работать.

person Spawn    schedule 09.11.2020