为什么 Rails 只在生产服务器上提供"`require': cannot load such file -- singleton"?



我正在尝试将Rails 4.0项目从PostgreSQL转换为MySQL。

我在本地Vagrant虚拟机中所有的东西都在工作,但在我执行cap deploy之后,这就是我在生产服务器上的日志中看到的:

I, [2015-03-25T15:39:12.558662 #28566]  INFO -- : Refreshing Gem list
[snip]/shared/bundle/ruby/2.2.0/gems/activesupport-4.0.13/lib/active_support/deprecation.rb:1:in `require': cannot load such file -- singleton (LoadError)
        from [snip]/shared/bundle/ruby/2.2.0/gems/activesupport-4.0.13/lib/active_support/deprecation.rb:1:in `<top (required)>'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/configuration.rb:1:in `require'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/configuration.rb:1:in `<top (required)>'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/railtie.rb:2:in `require'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/railtie.rb:2:in `<top (required)>'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/engine.rb:1:in `require'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/engine.rb:1:in `<top (required)>'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/application.rb:4:in `require'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/application.rb:4:in `<top (required)>'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails.rb:9:in `require'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails.rb:9:in `<top (required)>'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/all.rb:1:in `require'
        from [snip]/shared/bundle/ruby/2.2.0/gems/railties-4.0.13/lib/rails/all.rb:1:in `<top (required)>'
        from [snip]/releases/20150325221423/config/application.rb:3:in `require'
        from [snip]/releases/20150325221423/config/application.rb:3:in `<top (required)>'
        from [snip]/releases/20150325221423/config/environment.rb:2:in `require'
        from [snip]/releases/20150325221423/config/environment.rb:2:in `<top (required)>'
        from config.ru:4:in `require'
        from config.ru:4:in `block in <main>'
        from [snip]/shared/bundle/ruby/2.2.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
        from [snip]/shared/bundle/ruby/2.2.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
        from config.ru:1:in `new'
        from config.ru:1:in `<main>'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn.rb:48:in `eval'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn.rb:48:in `block in builder'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:764:in `call'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:764:in `build_app!'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:628:in `init_worker_process'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:651:in `worker_loop'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:525:in `spawn_missing_workers'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:536:in `maintain_worker_count'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:294:in `join'
        from [snip]/shared/bundle/ruby/2.2.0/gems/unicorn-4.8.3/bin/unicorn:126:in `<top (required)>'
        from [snip]/shared/bundle/ruby/2.2.0/bin/unicorn:23:in `load'
        from [snip]/shared/bundle/ruby/2.2.0/bin/unicorn:23:in `<main>'
E, [2015-03-25T15:39:12.723362 #1450] ERROR -- : reaped #<Process::Status: pid 28563 exit 1> worker=0

但我的理解是singleton是Ruby的一个特性,而不是我可能缺少的某个第三方库。这是正确的吗?这里有什么问题?

编辑:我正在将Chef添加到此项目中。在将生产配置应用到实际的生产服务器之前,我已经设置了第二个Vagrant VM来测试它。我已经将这个虚拟机配置为与生产服务器匹配,尽我所能,但虚拟机运行良好。

我完成了向项目中添加Chef,现在使用它来配置生产服务器。大约在同一时间,我还升级到了Rails 4.2。

我不再收到这个错误,所以这可能是解决问题的两件事之一。

相关内容

最新更新