我有一个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)
我已经验证{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
中删除)来“修复”此问题。然后所有的错误消失了,一切正常,但这似乎是错误的。
答案 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 s
,rails 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
环境中运行是正常的。
我想我会通过以下方式解决问题:
production
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
。您的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
通过这种方式,“听”会自动在gemfile中显示我