0

serialized 될 때 부적절하게 실행되어 delayed_job으로 실행되는 일부 코드가 있습니다. 필수품을 없애기 위해 나는 Ubuntu 11.04, Ruby 1.8.7을 Rails 3.0.4와 함께 사용하고 있습니다.Ruby on Rails, delayed_job GMT로 잘못된 datetime을 serialize

내 테이블 중 하나에 특정 이벤트의 날짜와 시간을 저장하는 datetime 필드가 있습니다. RoR 응용 프로그램에서이 필드를 사용하여 응용 프로그램에서 strftime을 호출하여 다양한 방식으로 형식을 지정합니다. 이 형식의 출력은 웹 페이지에서 정확합니다.

나는 delayed_job을 사용하여 보낸이 전자 메일에이 동일한 필드를 넣으려고합니다 (어떤 작업을 통해 트리거 됨). 이메일이 도착하면 어떻게 든 GMT로 포맷 된 것처럼 보입니다. 예를 들어 날짜 시간이 데이터베이스에서 11-12-2011 15:30:00 (오후 3:30)이라고 가정하면 이메일에 11-12-2011 22:30:00 (10:30 PM)이라고 표시됩니다.).

나는 데이터베이스에보고하고 흥미로운 일도 발견

  • 데이터베이스의 날짜는 웹을 통해 표시 2011-11-12 22:30:00
  • 응용,이다, 11-12-로 데이터를 제대로 포맷 2011 3:30 PM
  • 이메일은 오후
  • 10시 반은 단순히 날짜와 시간

    를 인쇄하는 작은 루비 파일을 실행하면, 2011년 11월 12일로 데이터를 제대로 포맷

    페이지 Time.now

나는 (지역, 비 GMT 시간)이에게 정확한 출력을 얻을

Mon Aug 15 10:15:27 -0600 2011 

나는 delayed_jobs 테이블에 대한 직렬화 YAML에 무엇인지, 내가 할 수있는 볼 날짜 필드 내 application.rb에서

2011-11-12 22:30:00 Z 

로 포맷 된 것을 볼, 내가 가진

내 environment.rb에의, 나는

timezone = "Mountain Time (US & Canada)" 

어느 한 날 여기 무슨 일이 일어나고 있는지 알아내는 데 도움이 수 있습니까? 나는 RoR에 비교적 익숙하지 않기 때문에 이것은 매우 명백하고 쉬운 질문 일 수있다. 디버그 정보가 더 필요하면 알려 주시면 게시 해 드리겠습니다. 마찬가지로, 제 질문이 명확하지 않은 경우 명확하게하려고 시도 할 수 있습니다

답변

1

직렬화하기 전에 날짜 객체를 문자열로 변경해보십시오.

+0

D' oh. delayed_job은 시간대에 대해 알지 못하고 직렬화 해제 후에 GMT를 사용합니다. – davidstites

0

데이터베이스에 시간대를 설정할 수 있습니다. MySQL 인 경우 다음을 참조하십시오. http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

+0

James - 시간대가 MySQL에 맞게 올바르게 설정되어있는 것처럼 보입니다. 'select now(); '를 실행하고 내 시간대 (Mountain)에 맞는 날짜와 시간을 반환했습니다.그것을 시도해야 할 다른 방법이 있습니까? – davidstites

+0

그러면 MySQL이 올바르게 설정되었습니다. 뭔가 다른 것이 틀림 없습니다. 무엇이 확실하지 않습니다. – jschorr

2

필자의 경우 보기에서 in_time_zone 메서드를 명시 적으로 지정하여 해결했습니다 (예 : @my_obj.created_at.in_time_zone).

나는 그것이 우아하지 않다는 것을 알고 있지만, 지금까지 나는 더 나은 해결책을 찾지 못했습니다.