如何配置Travis-CI以使用rails应用程序的正确时区?

在我的application.rb中,我有

config.time_zone = "Pacific Time (US & Canada)" 

这在开发/测试和生产服务器中正常工作。 但是,当我推送到Travis-CI时,它似乎已本地化为UTC,例如I18n.l Time.now的输出。

Travis-CI ruby​​ / rails环境有什么不同之处吗?

我完成设置时区的方法是在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 

这对我有用:

 before_install: - export TZ=Australia/Canberra 

要检查是否正确,您可以输出日期:

 - date 

我有类似的问题并解决了它。

在开发方面,我的时间是+10 GMT。

在特拉维斯,我的时间是格林尼治标准时间+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 

这是我如何改变特拉维斯的时间。 我有2种方法。

 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