Ruby Sinatra 在 const_get 中抛出错误数量的参数(2 对 1)

Ruby Sinatra throwing wrong number of arguments (2 for 1) in const_get

我已经在本地机器(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' from \..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' from \..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!' from \..gem/ruby/1.8/gems/sinatra-1.4.6/lib/sinatra/main.rb:25

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?

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

机架 (1.6.1) 捆绑安装