【问题标题】:mocha expectation error when trying to bring up rails server尝试启动 Rails 服务器时出现 mocha 预期错误
【发布时间】:2013-02-04 18:38:23
【问题描述】:

我有一个完美运行的 rails 项目,但是我不得不重新安装几个 gem 并在 rbenv 和 rvm 之间切换。我之前在运行 rvm,然后我切换到 rbenv,开始出现一堆异常,尝试切换回 rvm 但仍然收到相同的错误。

我倾向于相信这不是 rvm/rbenv 问题,而是我的 gem 安装方式发生了变化。

这是完整的堆栈跟踪:

> rails s thin                                                                                                                                                                                                  kaush@Air-Kode
DEPRECATION WARNING: Yajl's JSON gem compatibility API is going to be removed in 2.0
~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/mocha-0.10.0/lib/mocha/expectation_error.rb:5:in `<module:Mocha>': superclass mismatch for class ExpectationError (TypeError)
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/mocha-0.10.0/lib/mocha/expectation_error.rb:3:in `<top (required)>'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `block in load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:597:in `new_constants_in'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/mocha-0.10.0/lib/mocha/expectation.rb:3:in `<top (required)>'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `block in load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:597:in `new_constants_in'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/mocha-0.10.0/lib/mocha/mock.rb:2:in `<top (required)>'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `block in load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:597:in `new_constants_in'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/mocha-0.10.0/lib/mocha/mockery.rb:2:in `<top (required)>'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `block in load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:597:in `new_constants_in'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/mocha-0.10.0/lib/mocha/api.rb:2:in `<top (required)>'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `block in load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:597:in `new_constants_in'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/mocha-0.10.0/lib/mocha_standalone.rb:1:in `<top (required)>'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `block in load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:597:in `new_constants_in'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/mocha-0.10.0/lib/mocha.rb:2:in `<top (required)>'
    from ~/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:68:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
    from ~/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:66:in `each'
    from ~/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:66:in `block in require'
    from ~/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:55:in `each'
    from ~/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:55:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.2.3/lib/bundler.rb:128:in `require'
    from ~/my_project/config/application.rb:7:in `<top (required)>'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/railties-3.0.20/lib/rails/commands.rb:28:in `require'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/railties-3.0.20/lib/rails/commands.rb:28:in `block in <top (required)>'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/railties-3.0.20/lib/rails/commands.rb:27:in `tap'
    from ~/.rvm/gems/ruby-1.9.2-p180@my-gemset/gems/railties-3.0.20/lib/rails/commands.rb:27:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

我的 gem 版本:

   gem 'rails', '3.0.20'
   gem 'mocha'

过去 3 天这件事一直困扰着我,不胜感激......

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rvm ruby-mocha


    【解决方案1】:

    在从 rails-3.0.9 升级到 3.0.20 的情况下,我有一个类似的堆栈,但是在测试应用程序 (rspec) 时

    测试

    [sec] $ rm lib/mocha/setup.rb
    [sec*]$ bundle exec rspec spec/
    /Users/thenrio/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mocha-0.10.5/lib/mocha/expectation_error.rb:5:in `<module:Mocha>': superclass mismatch for class ExpectationError (TypeError)
    

    解决办法

    [sec*]$ git checkout -f
    [sec]$ cat lib/mocha/setup.rb
    # patching nightmare
    #
    # XXX remove when rails > 3.2.0
    #
    # https://github.com/freerange/mocha/issues/138
    #
    
    [sec]$ bundle exec rspec spec
    Finished in 8.85 seconds
    421 examples, 0 failures
    

    运行

    mocha 不需要运行服务器

    检查您的 Gemfile

    mochatest 组中占有一席之地 (group :test do; gem 'mocha', '~&gt; 0.10.0', require: false; end)

    【讨论】:

    • 谢谢!这似乎在 Rails 3.2.13 中仍然被打破
    【解决方案2】:

    如果您的 RVM 设置之前可以正常工作,您应该:

    1. 仅使用 RVM 环境打开一个新的控制台/ssh 会话
    2. rvm gemset 删除 my-gemset
    3. rvm gemset 创建我的gemset
    4. cd(应该自动加载 .rvmrc 文件或 rvm gemset 使用 my-gemset)
    5. 捆绑安装

    这应该为这个应用程序重建工作 gemset。

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 2014-07-28
      相关资源
      最近更新 更多