LoadError: Could not load the 'listen' gem (Rails 5)
LoadError: Could not load the 'listen' gem (Rails 5)
我有一个 API 模式 Rails 5 应用程序,它不允许我 运行 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'
感谢帮助!
更新:
我可以 "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 s
、rails 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
中都是 运行 是正常的] 环境。
我想我会通过以下方式解决问题:
- 在 ~/.bash_profile
添加 export RAILS_ENV=production
- 明确编写我希望命令执行的环境,如
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
。你的 ruby
是 2.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 命令放在此
之后来修复它
我有一个 API 模式 Rails 5 应用程序,它不允许我 运行 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'
感谢帮助!
更新:
我可以 "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 s
、rails 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
中都是 运行 是正常的] 环境。
我想我会通过以下方式解决问题:
- 在 ~/.bash_profile 添加
- 明确编写我希望命令执行的环境,如
bundle exec rake a_rake:task RAILS_ENV=production
rails console --env=production
等...
export RAILS_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
。你的 ruby
是 2.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 命令放在此
之后来修复它