LoadError: не удалось загрузить гем «прослушать» (Rails 6)

Аналогичный вопрос по SO, но с рельсами 5. Этот пример: Rails 6.0.3 с VPS в разработке.

Бег

RAILS_ENV=development bundle exec rails assets:precompile

на сервере или cap development deployлокально для развертывания приводят к тому, что listen оказывается скрытым от vue.

Сервер:

RAILS_ENV=development bundle exec rails assets:precompile
rails aborted!
LoadError: Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile

локальное развертывание:

  01 rake aborted!
  01 LoadError: Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile
  01 /home/deploy/zappa/shared/bundle/ruby/2.6.0/gems/bootsnap-1.5.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
  01 /home/deploy/zappa/shared/bundle/ruby/2.6.0/gems/bootsnap-1.5.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
  ...
  01 Caused by:
  01 LoadError: cannot load such file -- listen

но вот в чем дело:

group :development do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '~> 3.4'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

Комментирование драгоценного камня из Gemfile предсказуемо терпит неудачу; Я предполагаю, что рельсы хотят знать об изменениях и действовать только в соответствии с ними.

Выполнение RAILS_ENV=development bundle install возвращает подсказку:

Gems in the groups development and test were not installed.

Так как же сделать видимым listen драгоценный камень?

Перемещение вызова gem из блока development в глобальный блок позволяет RAILS_ENV=development bundle install работать на удаленном сервере. Теперь гем прослушивания установлен, и развертывание можно приступить к компиляции. это хак, так как прослушивание предназначено только для режима разработки; см. ответ ниже


person Jerome    schedule 13.01.2021    source источник
comment
Что указывает bundle config для параметра without? Включает ли он development, когда не должен? См. bundler.io/guides/groups.html.   -  person pdobb    schedule 14.01.2021
comment
Ты прав. Set for your local app (/home/deploy/zappa/releases/20210113174140/.bundle/config): [:development, :test] По сути говоря, следует вызывать Bundler.require(:default, :development) или bundle install --with development. Я ошибочно предположил, что вызов RAILS_ENV=development bundle install очевиден (я не сталкивался с этой проблемой в Rails 5)?   -  person Jerome    schedule 14.01.2021
comment
Похоже, это та же проблема для Rails 5: stackoverflow.com/questions/38663706/   -  person Colin Kelley    schedule 17.01.2021


Ответы (1)


самый прямой способ решить проблему - добавить

set :bundle_without, %w{test}.join(':') 

в файл конфигурации deploy/development.rb в соответствии с инструкциями capistrano.

Значение по умолчанию:

set :bundle_without, %w{development test}.join(':') 

что нелогично для среды разработки.
Сообщение об ошибке также вводит в заблуждение:

LoadError: Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile
person Jerome    schedule 18.01.2021