大家好,全部, 我认为这是关于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
修复文件route.rb
require 'sinatra'
configure do
C = "this is a test for constant"
end
get '/' do
"Hello World!"
end
现在,服务器不再警告常量被初始化。 但服务器的日志仍然出现双倍“GET”要求, 我只是希望每个客户都需要一个,这是我的问题,如何解决它。
提前致谢。
答案 0 :(得分:1)
那有什么不对?如果您定义常量两次(如果您有两个GET请求或GET和HEAD请求会发生这种情况),那么将显示该警告。你是全局变量。但是如果你不必这样做,试着不惜一切代价避免全局状态,否则你可能会遇到架构问题(如果你想提供更多的端点和全局冲突会怎样)并且难以扩展:如果你依赖于流程的内部状态,您能从两个流程服务网站吗?两台机器怎么样?