2011-03-10 4 views
0

임 루비로 시작하여 우리 팀 리더가 Sinatra를 배우고, 응용 프로그램 변경을 다시로드하는 것은 엽총에 의해 수행되었습니다. 이제 문제는 내가 싱글 톤 개체 인 을 유지하고 싶습니다. 요청이지만 산탄 총을 다시 시작하는 것은 모든 요청입니다. 이에Ruby Singleton and Shotgun

어떤 도움이나 설명은, 사전에

감사 apreciated 될 것이다.

답변

4

세션 데이터에 저장되지 않는 한 응용 프로그램의 상태가 요청간에 저장되는 (Shotgun 또는 Shot 건이 아님) 것에 대해서는 기대하지 않아야합니다.

+1

예, 세션의 정확한 이유입니다. HTTP는 상태 비 저장 프로토콜이므로 서버는 연결간에 상태를 유지할 수 없습니다. –

+0

나는 HTTP에 대해이 점을 이해하고 있지만, 문제가 아니라는 것을 알고있다. HTTP는 상태가 없다는 것을 알고있다. 왜 그 싱글 톤을 사용하는지, 다른 사용자의 요청 사이에 데이터를 저장하는 이유가 무엇인지, 그래서 세션이 ' 나를 위해 일하는, 또한 지금은 데이터베이스에 데이터를 저장하고 싶지 않아요, 아이디어는 응용 프로그램이 실행되는 동안 데이터를 kkep하는 것입니다, 그리고 그 데이터는 전체 애플 리케이션을위한 sared 개체에 저장해야합니다,없이 작동하는 것 shoutgun, (단순한 sinatra '루비 app.rb'),하지만 내가 산탄 총을 다시로드 할 때 그것은 깨진다. – enkult

+1

그것은 신뢰할 수없는 방법이다. 프로덕션 환경에서는 동시에 두 개 이상의 프로세스가 실행되며 서로간에 이러한 방식으로는 공유 할 수 없습니다. 웹 서버를 다시 시작하거나 충돌이 발생하고 다시 시작되면 상태가 손실됩니다. 모든 사용자에 대해 지속성 데이터를 저장해야하는 경우 응용 프로그램 외부에서 일종의 지속성 데이터 저장소 (SQL, Redis, Memcached 등)가 필요합니다. –

1

세션을 샷건으로 유지하려면 키를 설정해야합니다. 그렇지 않으면 모든 페이지가로드 될 때마다 재설정됩니다.

enable :sessions 
set :session_secret, "yourKey"