2009-04-06 4 views
2

이것은 정말 이상한 레일 문제입니다.이 버그는 알려진 버그와 관련이 있는지 알아 보려고 시도했지만 아무 것도 발견하지 못했습니다. 유용한 링크와 솔루션에 대한 불만이 있습니다.레일에서 시간대가 이상 함

나는이 아래로 문제를 끓일 수 : 내 레일 응용 프로그램을 시작하는 경우

및 HTTP 요청을 통해 다음과 같은 레일 코드를 실행합니다.

Time.zone = 'Europe/London' 
logger.info Time.zone.inspect 

로그 쇼는이 시간대

#<ActiveSupport::TimeZone:0x3d7438c @tzinfo=nil, @name="UTC", @utc_offset=0> 
바로 다음 요청에

(대부분의 후속 요청)으로, 동일한 코드 라인에 대한 로그이

#<ActiveSupport::TimeZone:0x46cc100 @tzinfo=#<TZInfo::DataTimezone: Europe/London>, @name="Europe/London", @utc_offset=nil> 

보여줍니다 도대체 무슨 일이 일어 났는지 알아?

편집 (도움이된다면 나는 레일 2.3.2을 실행 해요) : 레일 2.2.2이 문제가없는, 그래서 나는 지금 그에게 되돌아 갈 것으로 보인다.

답변

4

ActiveSupport::TimeZone은 절이기 및 복원 할 수 있도록 Time.zone을 가로 채고 있습니다. 이것은 어떤 이유로 느리게 수행됩니다 (변경 사항이 즉시 표시되지 않는 이유). 여기에는 크로스 세션과 멀티 스레드 문제가 있으며, 나는 그것의 권리를 모른다. 내가 말할 수는 다음과 같습니다

  • 당신이 정말보고있다가 그런 식으로 코딩 있기 때문에에 (그것은 분명하지 않다이
  • 해결에 대한 개방 TODO 항목이 있습니다
  • 무슨 일이 일어나고
  • 일어나고있다 나) 적어도 세계적으로 "올바른"행동이 있어야합니다.

이 기능의 기본적인 문제는 설정 프로그램 내부에서 응용 프로그램 프로그래머의 의도 범위를 구분할 명확한 방법이 없다는 것입니다. 이것은 사이트 전체 설정입니까? 세션 전체 설정? 지나치는 공상?

컨벤션 오버 패러다임 컨셉 패러다임에서, 그런 것들은 그것을 해결하기 위해 협약을 필요로하며,이 영역은 아직 얻지 못했습니다.

관련 문제