LoadError:无法加载'listen'gem(Rails 5)

时间:2016-07-29 16:41:24

标签: ruby-on-rails ruby-on-rails-5 listen

我有一个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)

我已经验证{Generfile中的listen位于开发组中:

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'

感谢帮助!

更新

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

10 个答案:

答案 0 :(得分:56)

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

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

这需要宝石听。这让我有点兴奋,因为我正在对rails 5进行rails 4升级

编辑: 忘了提一下,如果你评论那行代码,就不再需要listen gem了。

答案 1 :(得分:40)

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

要恢复此次运行:

bundle config --delete without

我也运行bundle config --delete with,因为我手动设置with选项也是错误的。运行这两个应该会让你回到默认行为。

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

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

Gems in the groups development and test were not installed.

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

答案 2 :(得分:15)

我发布此答案,但我不喜欢。

我可以&#34;修复&#34;将gem 'listen', '~> 3.1.5'放入全局Gemfile(并将其从:development中删除)的问题。然后所有的错误消失了,一切正常,但这似乎是错误的。

答案 3 :(得分:6)

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

错误:

  

无法加载'listen'宝石。将gem 'listen'添加到Gemfile的开发组(LoadError)

在此之后,使用该代码:

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

最后

bundle install

答案 4 :(得分:5)

我通过运行if ( Request.Cookies["MyCookie"] != null ) { var c = new HttpCookie( "MyCookie" ); c.Expires = DateTime.Now.AddDays( -1 ); Response.Cookies.Add( c ); } 来解决同样的问题。

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

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

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

答案 5 :(得分:5)

从Rails 5.1.5升级到5.2.0后,我今天遇到了类似的问题。第一次运行服务器时,存在以下缺少的资产&#39;问题:

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

尝试预编译资产会显示&#39; gem listen错误&#39;:

$ 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

这预先编译了没有问题的资产和缺少的资产&#39;问题得到解决。

答案 6 :(得分:4)

我有同样的问题。感谢@newdark回答我找到了正确的解决方案。基本上我想在production模式下部署rails。但显然忘记在运行服务器之前设置环境变量RAILS_ENV=production

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

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

答案 7 :(得分:2)

经过大量的重建试验,我发现了一个简单的解决方法

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

如果您在正确设置环境之前意外地构建了宝石集,那么这可能有助于清除问题。

答案 8 :(得分:1)

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

解决了这个问题
rails c -e production

答案 9 :(得分:0)

尝试生成mongoid database file时遇到相同的错误。

但是我在rails new project上创建了ruby 2.5.1。您的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

通过这种方式,“听”会自动在gemfile中显示我