ArgumentError: 잘못된 시간대 US/Pacific-New으로 500 오류 발생

방금 업그레이드한 표준 설치 환경에서 시간대 문제로 인해 실패하고 있습니다. 한 사용자만 해당되는 것 같지만 아직 정확히 확신은 없습니다.

결국 한 사용자에게서 발생한 문제였습니다. 해당 사용자의 프로필을 확인해보니 시간대가 설정되어 있지 않았습니다. 시간대를 설정하니 문제가 해결되었습니다.

Started GET "/t/37040.json?track_visit=true&forceLoad=true" for 204.98.75.5 at 2023-03-23 21:36:37 +0000
Processing by TopicsController#show as JSON
  Parameters: {"track_visit"=>"true", "forceLoad"=>"true", "id"=>"37040"}
Completed 500 Internal Server Error in 48ms (ActiveRecord: 0.0ms | Allocations: 8345)
ArgumentError (Invalid Timezone: US/Pacific-New)
(eval):82:in `_fast_attributes'
app/serializers/post_stream_serializer_mixin.rb:54:in `block in posts'
app/serializers/post_stream_serializer_mixin.rb:47:in `map'
app/serializers/post_stream_serializer_mixin.rb:47:in `posts'
app/serializers/post_stream_serializer_mixin.rb:18:in `post_stream'
(eval):3:in `_fast_attributes'
app/controllers/application_controller.rb:545:in `render_json_dump'
app/controllers/topics_controller.rb:1242:in `block (2 levels) in perform_show_response'
app/controllers/topics_controller.rb:1232:in `perform_show_response'
app/controllers/topics_controller.rb:187:in `show'
app/controllers/application_controller.rb:414:in `block in with_resolved_locale'
app/controllers/application_controller.rb:414:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:369:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'
Failed to handle exception in exception app middleware : ArgumentError : Invalid Timezone: US/Pacific-New
  Rendered text template (Duration: 0.0ms | Allocations: 1)
Started GET "/latest.json" for 172.220.127.141 at 2023-03-23 21:37:00 +0000
Processing by ListController#latest as JSON

수정: 아마도 그의 시간대가 그 잘못된 값으로 설정되어 있었을 수도 있겠네요. 시간대가 nil인 다른 사용자로 테스트해봤는데 에러가 발생하지 않았습니다.

3개의 좋아요

어떤 버전에서 업그레이드하셨나요?

아래 링크와 관련이 있을 수도 있습니다 (오래된 PR): FIX: removes us_pacific-new from the list of available timezones - Pull Request #10514 - discourse/discourse - GitHub

5개의 좋아요

와, 잘 짚어주셨네요. 옛 커밋에서 문자열을 더 잘 검색하는 방법을 배워야겠어요. GitHub UI를 통해 그렇게 하시나요? 어디서 하시나요?

최근 버전에서 나온 거라, 한 달도 안 된 거예요. 이제 와서 이런 문제가 되는 건 최신 라이브러리가 무언가를 다르게 강제하고 있는 게 아니라면 말이 안 되거든요.

그래서 어쩌면 우연일 수도 있고, 아니면 그 커밋에서 이제 더 이상 유효하지 않은 그 시간대의 사용자 설정을 함께 제거했어야 했을 수도 있겠네요.

1개의 좋아요
  1. 검색하려는 저장소로 이동합니다.
  2. 왼쪽 상단에 검색어를 입력합니다.

  1. 클릭한 후 '이 저장소에서(in this repository)'를 선택합니다.

2개의 좋아요

그걸 6년이나 걸려서야 깨달았다는 게 믿기지가 않아요!

3개의 좋아요

음, 아직 해결하지 못한 것 같네요.

하지만 잠깐! 그동안 제가 놓치고 있었던 비밀이 바로 이거예요:

그리고 "이슈"를 클릭하면… . . . . 드디어!

정말 감사합니다.

1개의 좋아요

제 생각에는 US/Pacific-New를 시간대로 선택할 수 있었던 특정 기간이 있었고, 이 사용자가 그때 선택한 것 같습니다. 그리고 이제 어떤 라이브러리가 해당 시간대를 가진 사용자에게 실패하고 있습니다.

UserOption.where(“timezone like ‘%Pacific-New%’”)

이 쿼리로 해당 시간대를 가진 다른 사용자를 찾지 못했으므로, 이 사이트에서는 다시는 발생하지 않을 것 같습니다.

1개의 좋아요