【问题标题】:How can I tell which gem is causing Rails not to start up?如何判断是哪个 gem 导致 Rails 无法启动?
【发布时间】:2011-01-27 19:26:31
【问题描述】:

我在尝试启动我的 Rails 2.3.8 项目时遇到此错误:

nil:NilClass (NoMethodError) 的未定义方法 `map'

我以前卖过一堆 gem,这是一个草率的项目,在 environment.rb 中没有相应的 config.gem 行。

我怎样才能恢复这个项目以便它可以启动?我在供应商中拥有所有这些宝石。我想过只是删除它们,启动项目,然后等待失败重新添加最新版本的 gems。这可行吗?

堆栈跟踪没有帮助:

/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:223:in `activate': undefined method `map' for nil:NilClass (NoMethodError)
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:249:in `activate'
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `each'
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `activate'
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:249:in `activate'
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `each'
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `activate'
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:1082:in `gem'
from ./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:73:in `add_load_paths'
from ./script/../config/../vendor/rails/railties/lib/initializer.rb:301:in `add_gem_load_paths'
from ./script/../config/../vendor/rails/railties/lib/initializer.rb:301:in `each'
from ./script/../config/../vendor/rails/railties/lib/initializer.rb:301:in `add_gem_load_paths'
from ./script/../config/../vendor/rails/railties/lib/initializer.rb:132:in `process'
from ./script/../config/../vendor/rails/railties/lib/initializer.rb:113:in `send'
from ./script/../config/../vendor/rails/railties/lib/initializer.rb:113:in `run'
from /Library/Illumaware/code/evokat25/config/environment.rb:19
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /Library/Illumaware/code/evokat25/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
from /Library/Illumaware/code/evokat25/vendor/rails/activesupport/lib/active_support/dependencies.rb:521:in `new_constants_in'
from /Library/Illumaware/code/evokat25/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
from /Library/Illumaware/code/evokat25/vendor/rails/railties/lib/commands/server.rb:84
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from script/server:3

【问题讨论】:

  • 您没有针对此问题的完整堆栈跟踪吗?
  • 我发现了问题。我在 config.gem 中有一个名为 ts-delayed-delta 的 gem。我有 gem vendored,它是合适的版本,但它必须有一些导致问题的隐藏依赖项。太糟糕了,它不会说它是什么。

标签: ruby-on-rails


【解决方案1】:

完整的堆栈跟踪应包含引发此异常的源文件和行号。

Stacktrace 可以在命令提示符中,当您启动 rails 项目时,或者在网页上。

【讨论】:

  • 看来问题出在这个文件 /Library/Illumaware/code/evokat25/config/environment.rb 的第 19 行。
【解决方案2】:

我通过对 environment.rb 文件中的 config.gem 行的试错编辑找到了罪魁祸首。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2015-07-23
    • 1970-01-01
    相关资源
    最近更新 更多