2014-06-22 5 views
2

내 padrino 프로젝트에서 기본 ActiveSupport :: TimeZone을 설정하는 데 문제가 있습니다. 내 boot.rb에서Padrino에서 Time.zone 설정

나는

Padrino.after_load do 
    Time.zone = 'UTC' 
    ActiveRecord::Base.default_timezone = :utc 
end 

내 컨트롤러 파일을 가지고있다 : 나는 색인 작업을 명중

MyApp::App.controllers :post do 
    get :index do 
    puts Time.zone # this returns nil 
    render 'index' 
    end 
end 

내가 Time.zone에 대한 전무를 얻을. 뭔가가 Time.zone을 덮어 쓰고 있거나 제대로로드되지 않은 것처럼 보입니다.

  • boot.rb에서 설정 한 후 시간대를 인쇄 할 수 있습니다. 그래서 나는 그것이 설정되었음을 안다. 내 boot.rb에서
+0

이봐, 모에 마스,이 문제를 해결할 수 있었습니까? – fractious

+0

아니요. 콘솔에서는 아래 제시된대로 작동하지만 컨트롤러에서는 작동하지 않습니다. – Moemars

+0

나 같은데. 테스트에서 작동하지만 dev에 실제 웹 앱을 실행하지 않은 경우 : / –

답변

0

당신은 다음과 같이 설정할 수 있습니다.

위의 내용은 5.0.2 지원으로 저에게 도움이되었습니다. 나는 Time.zone 구현 방법 바라 보았다 : 다음은 대부가 가진 현재의 thread로 누락 될 수 있음을 짐작

class Time 
    include DateAndTime::Zones 
    class << self 
    attr_accessor :zone_default 

    # Returns the TimeZone for the current request, if this has been set (via Time.zone=). 
    # If <tt>Time.zone</tt> has not been set for the current request, returns the TimeZone specified in <tt>config.time_zone</tt>. 
    def zone 
     Thread.current[:time_zone] || zone_default 
    end 

.

아마도 Time.zone은 각 스레드마다 한 번 설정해야합니다. 어떤 이유로 든 Padrino.before_load에 영역을 지정할 때 항상 그런 것은 아닙니다. 나는 이것을 파고 들지 않았지만, 각 스레드에서 그것을 할당하는 것이 더 좋은 해결책이라고 확신한다.

전체 앱의 전체 시간대가 아닌 사용자 별 시간대를 원한다면 더 자세히 알아볼 필요가 있습니다.

0

내가있어 :

Padrino.before_load do 
    Time.zone = 'UTC' 
end 

및 내 database.rb에 : 콘솔에서 테스트 한

ActiveRecord::Base.default_timezone = :utc 

가 작동하는 것 같다 :

ruby-2.1.4$ padrino c 
=> Loading development console (Padrino v.0.12.4) 
2.1.4 :001 > Time.zone 
=> #<ActiveSupport::TimeZone:0x007fbff62ed5c0 @name="UTC", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Etc/UTC>, @current_period=#<TZInfo::TimezonePeriod: nil,nil,#<TZInfo::TimezoneOffset: 0,0,UTC>>>> 
2.1.4 :002 > Time.zone.now 
=> Tue, 30 Dec 2014 13:14:57 UTC +00:00 
2.1.4 :003 > Time.current 
=> Tue, 30 Dec 2014 13:15:01 UTC +00:00 
2.1.4 :004 > ActiveRecord::Base.default_timezone 
=> :utc 

주의 루비 v2.1.4, padrino v0.12.4, activesupport/activerecord v4.2.0으로 테스트되었습니다. 당신이 필요로하는 모든 사용자들은

Time.zone_default = Time.find_zone!("UTC") 

하지만, 자세한 내용은 아래를 참조하십시오