Ruby/Sinatra-已初始化常量WFKV_
运行ruby 1.9.2p290和最新版本的Sinatra 当我尝试运行我的Sinatra应用程序时Ruby/Sinatra-已初始化常量WFKV_,ruby,rubygems,sinatra,Ruby,Rubygems,Sinatra,运行ruby 1.9.2p290和最新版本的Sinatra 当我尝试运行我的Sinatra应用程序时 ruby application.rb 我犯了一个错误 C:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_ 我签出并尝试了该修复,但没有成
ruby application.rb
我犯了一个错误
C:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_
我签出并尝试了该修复,但没有成功。也不会产生任何结果。这是一个警告,而不是错误。您可以安全地忽略它,如果不编辑
rack
源代码,您无法阻止它出现。如果警告使您出错,您可以始终使用Rails中的此方法暂时禁用Ruby:
def silence_stream(stream)
old_stream = stream.dup
stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
stream.sync = true
yield
ensure
stream.reopen(old_stream)
end
silence_stream(STDERR) do
silence_stream(STDOUT) do
require 'sinatra'
end
end
# rest of code as usual...
或者只阻止警告而不是整个stderr和stdout流:
verbose = $VERBOSE
$VERBOSE = nil
require 'sinatra'
$VERBOSE = verbose
# rest of code as usual...
如果这不起作用,那么您可能阻塞了错误的代码部分。由于rack导致了警告,我假设它发生在首次需要rack时。这可能是通过Sinatra为您完成的,这就是为什么我说在需要Sinatra的期间阻止警告。您可以尝试将其余的
require
s放在上述任何一个require'sinatra'
旁边的行中。这将在Rack 1.3.5和1.4.0中修复。简单修复:gem'Rack',1.3.3'(使用Rack的早期版本,错误会消失。)比简单地沉默要好得多。无论您当前在哪里都包括'sinatra'
(删除该行并用上面的代码替换),因此,是的,我假设application.rb。不过,该警告不会引起任何问题,因此您可以让它保持原样,但由您决定。对不起,我不确定我在想什么-我的意思是require
notinclude
。编辑以修复此问题。是的,我尝试了更新的版本,但仍然没有成功。我的设置似乎有问题?刚刚更新了答案。也许Windows处理输出流重定向的方式不同(尽管似乎并不意味着如此)。第二种方法无论如何都应该有效,而且更整洁。是的,没有成功,这一定是我的设置有问题。这是一个坏主意,正如上面的一条评论所解释的。你最好的办法就是忽略警告。长话短说:rack 1.3.3存在1.3.4解决的拒绝服务攻击漏洞。