已初始化常数,并需要两次

时间:2011-10-08 02:55:41

标签: sinatra

大家好,全部, 我认为这是关于sinatra中定义的常量的错误,让我们看看我的代码。

route.rb

require 'sinatra'

get '/' do
        C = "this is a test for constant"
        "Hello World!"
end

的Gemfile

source 'http://rubygems.org'
gem 'rack'
gem 'sinatra'

config.ru

require './route'
run Sinatra::Application

启动Web服务器,我们将看到以下内容

$ rackup 
[2011-10-08 19:54:36] INFO  WEBrick 1.3.1
[2011-10-08 19:54:36] INFO  ruby 1.9.2 (2011-07-09) [i686-linux]
[2011-10-08 19:54:36] INFO  WEBrick::HTTPServer#start: pid=3268 port=9292
127.0.0.1 - - [08/Oct/2011 19:54:42] "GET / HTTP/1.1" 200 25 0.0059
127.0.0.1 - - [08/Oct/2011 19:54:42] "GET / HTTP/1.1" 200 25 0.0142
/home/zcdny/repo/test/route.rb:4: warning: already initialized constant C
127.0.0.1 - - [08/Oct/2011 19:54:43] "GET / HTTP/1.1" 200 25 0.0094
127.0.0.1 - - [08/Oct/2011 19:54:43] "GET / HTTP/1.1" 200 25 0.0098
/home/zcdny/repo/test/route.rb:4: warning: already initialized constant C
127.0.0.1 - - [08/Oct/2011 19:54:55] "GET / HTTP/1.1" 200 25 0.0003
127.0.0.1 - - [08/Oct/2011 19:54:55] "GET / HTTP/1.1" 200 25 0.0006
/home/zcdny/repo/test/route.rb:4: warning: already initialized constant C
127.0.0.1 - - [08/Oct/2011 19:54:56] "GET / HTTP/1.1" 200 25 0.0003
127.0.0.1 - - [08/Oct/2011 19:54:56] "GET / HTTP/1.1" 200 25 0.0005

Eidt

修复文件route.rb

require 'sinatra'

configure do
        C = "this is a test for constant"
end

get '/' do
        "Hello World!"
end

现在,服务器不再警告常量被初始化。 但服务器的日志仍然出现双倍“GET”要求,  我只是希望每个客户都需要一个,这是我的问题,如何解决它。

提前致谢。

1 个答案:

答案 0 :(得分:1)

那有什么不对?如果您定义常量两次(如果您有两个GET请求或GET和HEAD请求会发生这种情况),那么将显示该警告。你是全局变量。但是如果你不必这样做,试着不惜一切代价避免全局状态,否则你可能会遇到架构问题(如果你想提供更多的端点和全局冲突会怎样)并且难以扩展:如果你依赖于流程的内部状态,您能从两个流程服务网站吗?两台机器怎么样?