LoadError: Не удалось загрузить "listen" gem (Rails 5)
У меня есть приложение Rails 5 в режиме API, которое не позволит мне запускать rake routes
или rails s
. Ошибка, которую я получаю:
$ rake routes
rake aborted!
LoadError: Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile
.../config/environment.rb:5:in `<top (required)>'
LoadError: cannot load such file -- listen
.../config/environment.rb:5:in `<top (required)>'
Tasks: TOP => routes => environment
(See full trace by running task with --trace)
Я проверил, что listen
находится в группе разработки в моем Gemfile:
group :development do
gem 'listen', '~> 3.1.5'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
И это в моем Gemfile.lock:
$ cat Gemfile.lock | grep 'listen'
listen (3.1.5)
spring-watcher-listen (2.0.0)
listen (>= 2.7, < 4.0)
listen (~> 3.1.5)
spring-watcher-listen (~> 2.0.0)
Я обновил пакет и установил пакет и проверил, что gem install listen
работает. Это работало ранее на этой неделе, но мне не повезло, что я вернусь через свои поручения.
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]
Я не вижу его в vendor/cache
, но я не уверен, что с этим делать...
$ bundle package | grep 'listen'
Цените помощь!
Update:
Я могу "исправить" проблему, поместив gem 'listen', '~> 3.1.5'
в глобальный Gemfile (и удалив его из :development
). Затем все ошибки уходят, и все работает, но это кажется неправильным.
Ответы
Ответ 1
Я отправляю это как ответ, но мне это не нравится.
Я могу "исправить" проблему, поместив gem 'listen', '~> 3.1.5'
в глобальный Gemfile (и удалив его из :development
). Затем все ошибки уходят, и все работает, но это кажется неправильным.
Ответ 2
Если вы находитесь на rails 5 и используете файл config/environment/development.rb по умолчанию, в нем будет эта строка кода.
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
Это требует, чтобы драгоценный камень слушал. Это отбросило меня на некоторое время, когда я делал рельсы 4 обновления до рельсов 5
edit: забыл упомянуть, что если вы прокомментируете эту строку кода, ему больше не понадобится камень прослушивания.
Ответ 3
Вы могли бы по ошибке установить bundle install --without
в какой-то момент, я обязательно сделал это.
Чтобы отменить этот прогон:
bundle config --delete without
Я также запускал bundle config --delete with
, поскольку я вручную установил параметр with
, а также по ошибке. Запуск обоих должен вернуть вас к поведению по умолчанию.
После удаления конфигурации without
я смог успешно запустить bundle install
снова, а затем мои rails s
, rails db:migrate
и т.д. работали.
Вы можете подтвердить, если это ваша проблема, запустив bundle install
и посмотрите на вторую последнюю строку на выходе. Если он указывает:
Gems in the groups development and test were not installed.
Это наверняка выше решение должно работать для вас.
Ответ 4
Я использовал это: bundle install --without development
Ошибка:
Не удалось загрузить "прослушивание" драгоценного камня. Добавьте gem 'listen'
в группу разработки вашего Gemfile (LoadError)
После этого используйте этот код:
bundle config --delete without
bundle config --delete with
Наконец
bundle install
Ответ 5
У меня такая же проблема, запустив rails c
.
Прочитав этот другой переполнение стека post, я понял, что нормально, что обе команды bundle exec rake
или rails console
работают в среде production
по умолчанию,
Я решил, что решит проблему либо:
- добавление
export RAILS_ENV=production
в ~/.bash_profile
- явно писать среду, в которой я хочу, чтобы команда выполнялась как
bundle exec rake a_rake:task RAILS_ENV=production
rails console --env=production
и т.д.
Ответ 6
У меня была похожая проблема сегодня после обновления с Rails 5.1.5 до 5.2.0. При первом запуске сервера возникла следующая проблема "недостающие ресурсы":
ActionView::Template::Error (The asset "asterisk_orange.png" is not present in the asset pipeline.)
Попытка прекомпилировать ресурсы показывает "ошибку прослушивания gem":
$ bundle exec rake assets:precompile
rake aborted!
LoadError: Could not load the 'listen' gem. Add 'gem 'listen'' to the development group of your Gemfile
Моим решением было явное задание продакшен среды:
$ RAILS_ENV=production bundle exec rake assets:precompile
Это прекомпилирует активы без проблем, и проблема "недостающих активов" была исправлена.
Ответ 7
У меня была такая же проблема. Благодаря ответу @newdark я понял правильное решение. В основном я хотел развернуть рельсы в режиме production
. Но, очевидно, забыл установить переменную окружения RAILS_ENV=production
перед запуском сервера.
Итак, чтобы вернуться, зависимости для режима production
были установлены, в то время как рельсы пытались запустить в режиме development
из-за забывания установить RAILS_ENV=production
. Если я добавлю gem listen
к зависимостям production
, я буду работать в режиме разработки, не будучи в состоянии заметить.
Для меня решение заключалось в том, чтобы сделать export RAILS_ENV=production
перед выполнением любых команд rails и сохранить взаимозависимости. Надеюсь, мне удалось объяснить.
Ответ 8
У меня была такая же проблема, я исправляю ее, запустив
rails c -e production
Ответ 9
У меня была та же ошибка при попытке создать mongoid database file
.
но я создал rails new project
на ruby 2.5.1
. Ваш ruby
2.2
. поэтому причинно-следственная связь может быть другой в моей ситуации.
когда я использовал rails new project
, он был создан в версии 5.2, затем я изменил gem на 5.1.2 и возникла проблема. Когда я создал с помощью rails _5.1.6_ new
в Gemfile, был создан дополнительный пакет для разработки.
group :development do
# Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
таким образом, "слушай" автоматически показывал мне в gemfile