2011-10-08 11 views
0

こんにちは、すべて これはsinatraで定義されている定数についてのバグです、私のコードを見てみましょう。は既に初期化された定数であり、2回必要です

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 
01が表示されます

require 'sinatra' 

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

get '/' do 
     "Hello World!" 
end 

route.rbファイルを修正

Eidt

は、もはや定数を警告サーバが初期化されます。 しかし、サーバーのログは依然としてダブル 'GET'が必要です。 私はちょうどそれがすべてのクライアントに必要な1つが必要です、それは私の質問です、それを解決する方法です。

ありがとうございます。

答えて

1

何が間違っていますか?定数を2回定義すると(2つのGET要求またはGET要求とHEAD要求がある場合に発生します)、その警告が表示されます。代わりにグローバル変数。しかし、そうしなければならない場合は、グローバルな状態を回避してみてください。それ以外の場合は、アーキテクチャー上の問題(より多くのエンドポイントとグローバルの衝突に対応したい場合)と、プロセスの内部状態、あなたは2つのプロセスからウェブサイトを提供することができるでしょうか? 2台のマシンはどうですか?

+0

私は二度必要であると理にかなっているシナトラには何も起こりません。質問を見て、私はそれを編集します。 – coolesting

+1

それでも、私の答えは変わりません。警告では、route.rbの4行目に定数を2回設定しています。あなたのファイルは一度だけロードされますが、その行はすべての要求に対して実行されます。 –

+0

実際、configureブロックに定義されている定数を追加すると、エラーメッセージは表示されません。しかし、私は本当になぜシニラツラが2回シードする必要があるのか​​、毎回の行動の必要性を知っています。 – coolesting

関連する問題