LoadError: Could not load the 'listen' gem (Rails 5)

LoadError: Could not load the 'listen' gem (Rails 5)

我有一个 API 模式 Rails 5 应用程序,它不允许我 运行 rake routesrails 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'

感谢帮助!

更新:

我可以 "fix" 通过将 gem 'listen', '~> 3.1.5' 放入全局 Gemfile(并从 :development 中删除)来解决问题。然后所有的错误都消失了,一切正常,但这似乎是错误的。

我将此作为答案发布,但我不喜欢它。

我可以 "fix" 通过将 gem 'listen', '~> 3.1.5' 放入全局 Gemfile(并将其从 :development 中删除)来解决问题。然后所有的错误都消失了,一切正常,但这似乎是错误的。

您可能在某个时候错误地设置了 bundle install --without,无论如何我确实设置了。

要还原此 运行:

bundle config --delete without

我也运行 bundle config --delete with因为我手动设置了with选项也是错误的。 运行 两者都应该让您回到默认行为。

删除 without 配置后,我可以再次成功 运行 一个 bundle install 然后我的 rails srails db:migrate 等工作。


您可以通过 运行ning bundle install 确认这是否是您的问题并查看输出中的倒数第二行。如果它声明:

Gems in the groups development and test were not installed.

以上解决方案肯定适合您。

如果您使用的是 rails 5 并且您使用的是默认的 config/environments/development.rb 文件,它将包含这行代码。

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

这需要 gem 收听。当我从 rails 4 升级到 rails 5

时,这让我有些吃惊

编辑: 忘了说,如果你注释掉那行代码,它就不再需要 listen gem。

我遇到了同样的问题。感谢@newdark 的回答,我找到了正确的解决方案。基本上我想在 production 模式下部署 rails。但是明显忘了在运行 server.

之前设置环境变量RAILS_ENV=production

所以回顾一下,安装了 production 模式的依赖项,而 rails 由于忘记设置 RAILS_ENV=production 试图以 development 模式启动。如果我继续将 gem listen 添加到 production 依赖项,我将 运行 处于开发模式而无法注意到。

对我来说,解决方案是在执行任何 rails 命令之前执行 export RAILS_ENV=production 并保持依赖关系完整。希望我能解释清楚。

运行 rails c 我遇到了同样的问题。

通过阅读其他 Stack Overflow post 我确实意识到 bundle exec rake 命令或 rails console 在默认 production 中都是 运行 是正常的] 环境。

我想我会通过以下方式解决问题:

  1. 在 ~/.bash_profile
  2. 添加 export RAILS_ENV=production
  3. 明确编写我希望命令执行的环境,如 bundle exec rake a_rake:task RAILS_ENV=production rails console --env=production 等...

我用过这个:bundle install --without development

错误:

Could not load the 'listen' gem. Add gem 'listen' to the development group of your Gemfile (LoadError)

在此之后,使用该代码:

bundle config --delete without
bundle config --delete with

终于

bundle install

我遇到了同样的问题,我通过 运行

解决了
rails c -e production

我今天从 Rails 5.1.5 升级到 5.2.0 后遇到了类似的问题。第一次 运行 服务器出现以下 'missing assets' 问题:

ActionView::Template::Error (The asset "asterisk_orange.png" is not present in the asset pipeline.)

尝试预编译资产显示 'gem listen error':

$ 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

这会预编译资产 w/o 问题,并且 'missing assets' 问题已修复。

我在尝试生成 mongoid database file 时遇到了同样的错误。

但我在 ruby 2.5.1 上创建了 rails new project。你的 ruby2.2。所以因果关系在我的情况下可能会有所不同。

我用rails new project的时候是5.2版本创建的,然后我把gem改成5.1.2就出现问题了。当我在 Gemfile 中使用 rails _5.1.6_ new 创建时,会生成额外的开发包。

  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

这样 'listen' 在 gem 文件自动显示

经过多次重建试验后,我找到了一个简单的修复方法

bundle config --delete without
bundle config --delete with
bundle install

如果您不小心在正确设置环境之前构建了 gemset,那么这可能有助于解决问题。

我正在使用 Docker 并在执行时遇到此错误

rails webpacker:install

发生这种情况是因为此行之前已被执行

ENV RAILS_ENV production
RUN chmod +x bin/rails
ENTRYPOINT ["bin/rails"]

通过简单地将所有 rails 命令放在此

之后来修复它