уже инициализированная константа, и требуется дважды - PullRequest
0 голосов
/ 08 октября 2011

Привет всем, я думаю, что это ошибка с константой, определенной в 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

Запустив веб-сервер, мы увидим ниже

$ 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 Ответ

1 голос
/ 08 октября 2011

Что в этом плохого? Если вы определяете константу дважды (что происходит, если у вас есть два запроса GET или запрос GET и HEAD), то это предупреждение будет отображаться. Вы глобальные переменные вместо. Но если вам не нужно, попытайтесь избежать глобального состояния любой ценой, в противном случае вы можете столкнуться с архитектурными проблемами (что, если вы хотите обслуживать большее количество конечных точек и глобальные конфликты) и затруднить масштабирование: если вы полагаетесь на внутреннее состояние процесса, сможете ли вы обслуживать сайт из двух процессов? а как насчет двух машин?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...