我正在使用Grape框架构建API,我想将整个应用程序的默认时区设置为UTC
,这样当我调用Time.zone.now
时,我得到了适当的时间
我的config/application.rb
看起来像:
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'api'))
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'app'))
$LOAD_PATH.unshift(File.dirname(__FILE__))
require 'bundler/setup'
Bundler.require :default, ENV['RACK_ENV']
Time.zone = 'UTC'
require_rel '../app'
require_rel '../api'
require_rel '../lib'
require_rel 'initializers'
如果我通过bundle exec rackup -p 3000
或bin/console
启动它并打电话给Time.zone.now
我得到适当的时间:Fri, 05 Apr 2019 00:47:23 UTC +00:00
虽然,当我使用Sidekiq工作人员或Rack本身以外的东西(bundle exec sidekiq -r ./config/application.rb
)并尝试调用p Time.zone
时,nil
返回,Time.current
返回时间与我的时区:2019-04-04 21:48:57 -0300
,即使我要求application.rb
包含Time.zone = 'UTC'
声明
如何为我的工作人员全局设置UTC时区?
这是一个简单的工人:它只是打印Time.now
或Time.zone.now
module Cron
class Date
include Sidekiq::Worker
JOB_NAME = 'date_job'
def perform(start_date = 1.day.ago, end_date = Time.current)
p [Time.now, Time.current]
end
end
end
您可以只引入一个ApplicationWorker
并让所有其他工作者继承该类。在这个新的父类中,您可以完成所有工作人员的共同点。
当你有这样的两个工人
class FooWorker
include Sidekiq::Worker
def perform
# do something
end
end
class BarWorker
include Sidekiq::Worker
def perform
# do something else
end
end
那么你可以像这样使用继承:
class ApplicationWorker
include Sidekiq::Worker
Time.zone = 'UTC'
end
class FooWorker < ApplicationWorker
def perform
# do something
end
end
class BarWorker < ApplicationWorker
def perform
# do something else
end
end