【问题标题】:How do I configure Travis-CI to use the correct time zone for a rails app?如何配置 Travis-CI 以对 rails 应用程序使用正确的时区?
【发布时间】:2014-04-29 17:35:42
【问题描述】:

在我的 application.rb 中,我有

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

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

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

【问题讨论】:

  • 请给我看看 gem 文件
  • 嗨@Jack,您对哪一部分感兴趣?
  • 请全部给我看。

标签: ruby-on-rails travis-ci


【解决方案1】:

这对我有用:

before_install:
- export TZ=Australia/Canberra

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

- date

【讨论】:

  • 这在禁用 sudo 等的“新”docker 实例上特别有用。
  • 在此处查看时区标识符列表:en.wikipedia.org/wiki/List_of_tz_database_time_zones
  • 我同意@JulianKessel,这应该是首选答案,因为大多数人应该使用新的 docker 基础设施。
  • 此解决方案也适用于 Codeship。只需从上面列出的 tz 数据库时区列表中将 TZ 环境变量设置为您需要的任何时区。
  • 这对我来说 100% 有效,最好在 travis.yml 的 before_install 部分执行它......非常感谢;)
【解决方案2】:

我完成设置时区的方法是在 travis.yml 的 before_script 部分中

它们为您提供对运行项目的 VM 的 root 访问权限,因此您可以简单地设置 ruby​​ 使用的操作系统时区:

    before_script:
      - echo 'Canada/Pacific' | sudo tee /etc/timezone
      - sudo dpkg-reconfigure --frontend noninteractive tzdata

如果您愿意,也可以通过在下面添加以下内容来强制更新:

      - sudo ntpdate ntp.ubuntu.com

【讨论】:

  • 注意:如果您使用的是 Travis 的容器基础设施,它限制了 sudo 访问(sudo: false),这将不起作用;使用@aruizca 的解决方案导出TZ
  • 我同意。容器的另一个答案是正确的(当我不得不解决这个问题时,基础设施并不存在:)。
【解决方案3】:

我遇到了类似的问题并解决了。

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

在特拉维斯,我的时间是格林威治标准时间 +11。

before_script:
  - export TZ=Australia/Melbourne

我使用 Time Cop gem 来测试依赖于时间的代码。以下是我如何更改 Travis 上设置的时间。

这是一个示例测试:

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

这是我在 Travis 上更改时间的方法。我有两种方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-13
    • 2020-02-28
    • 2021-08-14
    • 2016-04-22
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    相关资源
    最近更新 更多