2010-03-25 5 views
9

मेरी साइट Heroku पर तैनात है। Time.now आज वापस आ जाएगा, लेकिन एक रिकॉर्ड के बनाया_at फ़ील्ड (अभी बनाया गया) कल कल कहेंगे। मुझे लगता है कि सर्वर सर्वर के साथ क्या करना है?Time.now और Created_at अलग हैं? रेल पर रूबी

क्या यह सुनिश्चित करने का कोई तरीका है कि वे वही हैं? बेस्ट, इलियट


अद्यतन तो मैं ऐसा किया "Heroku रेक समय: क्षेत्र: हमें"

यह मुझे दिया:

* UTC -10:00 * 
Hawaii 

* UTC -09:00 * 
Alaska 

* UTC -08:00 * 
Pacific Time (US & Canada) 

* UTC -07:00 * 
Arizona 
Mountain Time (US & Canada) 

* UTC -06:00 * 
Central Time (US & Canada) 

* UTC -05:00 * 
Eastern Time (US & Canada) 
Indiana (East) 

तथापि, जब मैं config.time_zone सेट = मेरे पर्यावरण में 'यूटीसी -05: 00', ऐप शुरू करने में विफल रहता है। कोई विचार?

+0

आपको समय क्षेत्र निर्धारित करने के लिए 'पूर्वी समय (यूएस और कनाडा)' या 'इंडियाना (पूर्व)' का उपयोग करने की आवश्यकता होगी क्योंकि ये यूटीसी -05: 00 के नाम हैं। साथ ही, time.now के बजाय Time.current को कॉल करना सबसे अच्छा है जब config.time_zone सेट किया गया है। – Corey

+1

हाय: समय क्षेत्र के लिए नाम यूटीसी विनिर्देशों के नीचे दिखाई देते हैं। उदाहरण के लिए, उपयोग करें: config.time_zone = 'इंडियाना (पूर्व)' कोरी का कहना है कि टाइम.current (या Time.zone.now) का उपयोग करके आपके द्वारा कॉन्फ़िगर किए गए टाइमज़ोन के लिए समायोजित समय मिलेगा।आम तौर पर, आप जिस समय का उपयोग कर रहे हैं, उसके लिए आप किसी भी विधि का उपयोग कर सकते हैं, लेकिन आपको उन्हें Time.zone पर कॉल करना चाहिए जो आपके टाइमज़ोन को ध्यान में रखता है। यह निश्चित रूप से रेल से संबंधित है; यह सक्रिय समर्थन के बिना सादे रूबी पर काम नहीं करेगा। – Roadmaster

उत्तर

16

रेल हमेशा डेटाबेस पर यूटीसी समय स्टोर करते हैं; बनाया गया_at फ़ील्ड स्वयं ही यूटीसी के सापेक्ष आपके टाइमज़ोन की भिन्नता से ऑफ़सेट होना चाहिए।

जब भी आप अपने आवेदन में एक रिकॉर्ड लोड करते हैं, तो फ़ील्ड पर्यावरण.आरबी में निर्दिष्ट टाइमज़ोन में परिवर्तित हो जाते हैं। यह कुछ इस तरह हो सकता है:

config.time_zone = 'UTC' 

के लिए समय आपके समय क्षेत्र के ठीक से परिवर्तित किया, तो आप इस विन्यास एक अपने वास्तविक समय क्षेत्र मिलान के लिए सेटिंग बदल सकता है। उदाहरण के लिए:

config.time_zone = 'Central Time (US & Canada)' 

उपलब्ध क्षेत्रों को देखने के लिए, अपनी रेल निर्देशिका पर "रेक-डी टाइम" जारी करें। यह आपको कॉन्फ़िगरेशन में उपयोग के लिए समय क्षेत्र नाम कैसे प्राप्त करें इस पर निर्देश देगा।

+0

हाय रोडमास्टर, प्रतिक्रिया के लिए धन्यवाद, मैंने कोशिश की और अद्यतन त्रुटि – Elliot

+0

मुझे विश्वास है कि आपको application.rb में ऐसा करने की ज़रूरत है। – marimaf

1

Roadmaster के जवाब पर जोड़ने के लिए, मैं इसी तरह की चुनौती थी: सामान्य रेल timestamps डेटाबेस में यूटीसी के आधार पर संग्रहीत किया गया है, लेकिन मैं सब आज बनाए गए स्थानीय समय क्षेत्र के अनुसार रिकॉर्ड को खोजने के लिए क्वेरी करने के लिए की जरूरत है।

क्वेरी इस तरह देखा:

completions.where("created_at BETWEEN ? AND ?", 
    Date.today, Date.today + 1.day).count >= 1 

मैं इस प्रकार तारीखों को #to_time को फोन करके इस तय,। इसने उन्हें उचित समय क्षेत्र वाले टाइमस्टैम्प में परिवर्तित कर दिया, और डेटाबेस में सही रिकॉर्ड लाए गए, प्रभावी ढंग से क्वेरी टाइमज़ोन-जागरूक बनाते हुए।

completions.where("created_at BETWEEN ? AND ?", 
    Date.today.to_time, Date.today.to_time + 1.day).count >= 1 
0

बस उस समय क्षेत्र में अपूर्णता और परिवर्तन करने की आवश्यकता है जिसे आप चाहते हैं।

यदि आप सभी समय क्षेत्र की जांच करना चाहते हैं, तो rake time:zones:all चलाएं और एक सूची आउटपुट करेगा।

config/Application.rb 

module Clerk 
    class Application < Rails::Application 
    # Settings in config/environments/* take precedence over those specified here. 
    # Application configuration should go into files in config/initializers 
    # -- all .rb files in that directory are automatically loaded. 

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 
    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 
    config.time_zone = 'La Paz' 

    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 
    # config.i18n.default_locale = :de 
    end 
end 
संबंधित मुद्दे