在我的application.rb中,我有
config.time_zone = "Pacific Time (US & Canada)"
这在开发/测试和生产服务器中正常工作。但是,当我推送到Travis-CI时,它似乎已本地化为UTC,例如I18n.l Time.now
的输出。
Travis-CI ruby / rails环境有什么不同吗?
答案 0 :(得分:46)
这对我有用:
before_install:
- export TZ=Australia/Canberra
要检查是否正确,您可以输出日期:
- date
答案 1 :(得分:11)
我完成设置时区的方法是在travis.yml
的before_script部分它们为您提供对运行项目的VM的root访问权限,因此您只需设置ruby使用的OS时区:
before_script:
- echo 'Canada/Pacific' | sudo tee /etc/timezone
- sudo dpkg-reconfigure --frontend noninteractive tzdata
如果您愿意,还可以通过添加以下内容强制进行更新:
- sudo ntpdate ntp.ubuntu.com
答案 2 :(得分:0)
我有类似的问题并解决了它。
开发时,我的时间是格林尼治标准时间+10。
在特拉维斯,我的时间是格林威治标准时间+11。
before_script:
- export TZ=Australia/Melbourne
我使用Time Cop gem来测试时间依赖的代码。以下是我如何改变特拉维斯时间的设定。
以下是一个示例测试:
require 'spec_helper'
context "during the week after 11:00am for Morning Follow Up Call" do
before do
valid_prospect_params["treatment_enquiry_form"]["contact_time"] = "10:00 am"
freeze_time = Time.local(2015, 11, 18, 11, 01, 0)
change_time(freeze_time)
post :create_prospect, valid_prospect_params
reset_time
end
it "creates follow up activities" do
expect(prospect_followup_activities).to eq(3)
end
it "creates follow_up_call for the next day in the morning " do
expect(first_call.scheduled_for.to_s).to eq("2015-11-19 10:00:00 +1100")
end
end
以下是我如何改变特拉维斯的时间。我有两种方法。
def change_time(freeze_time)
if Time.now.strftime("%Z") == "AEDT"
Timecop.freeze(freeze_time + 1.hours)
else
Timecop.freeze(freeze_time)
end
end
def reset_time
Timecop.return
end