【问题标题】:Ruby Sinatra throwing wrong number of arguments (2 for 1) in const_getRuby Sinatra 在 const_get 中抛出错误数量的参数(2 比 1)
【发布时间】:2016-01-18 11:29:34
【问题描述】:

我已经在本地机器(Ruby 2.x)和服务器(Ruby 1.8.x)上安装了 sinatra gems。它在我的本地机器上运行良好,但在服务器上失败了。如果其他人以前遇到过这个问题,请帮助我解决这个问题。

require 'rubygems'
require 'sinatra'

get '/' do
  'Hello world!'
end

ruby --version

ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]

gem list
rack (1.6.4)
rack-protection (1.5.3)
sinatra (1.4.6)
tilt (2.0.1)

例外

ruby/1.8/gems/rack-1.6.4/lib/rack/handler.rb:22:in const_get': wrong number of arguments (2 for 1) (ArgumentError) from \\..gem/ruby/1.8/gems/rack-1.6.4/lib/rack/handler.rb:22:inget' 来自 \..gem/ruby/1.8/gems/sinatra-1.4.6/lib/sinatra/base.rb:1777:in detect_rack_handler' from \\..gem/ruby/1.8/gems/sinatra-1.4.6/lib/sinatra/base.rb:1775:ineach' 来自 \..gem/ruby/1.8/gems/sinatra-1.4.6/lib/sinatra/base.rb:1775:in detect_rack_handler' from \\..gem/ruby/1.8/gems/sinatra-1.4.6/lib/sinatra/base.rb:1437:inrun! 来自 \..gem/ruby/1.8/gems/sinatra-1.4.6/lib/sinatra/main.rb:25

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    Ruby 1.8.7:

    const_get(sym) => obj
    

    Ruby 2.1.0:

    const_get(sym, inherit=true) → obj
    

    因此,尽管 Sinatra 声称它支持 ruby​​ 1.8.7,但 Rack 显然不支持。您可以尝试将 Rack 降级到支持 1.8.7 的最新版本(我不知道会是哪个版本)。但是你为什么要在 2015 年使用 1.8.7 呢?

    【讨论】:

      【解决方案2】:

      适用于 ruby​​ 1.8.7 和 sinatra 1.4.6。 更新 Gemfile.lock 更新机架版本。

      机架 (1.6.1) 捆绑安装

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-22
        • 2012-04-15
        • 1970-01-01
        • 2016-04-07
        • 2014-06-23
        相关资源
        最近更新 更多