我正在使用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
答案 0 :(得分:0)
您只需引入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