小编Chr*_*aus的帖子

Alpine Linux 上的 Rails ActiveSupport 时间和时区错误

我不知道我是不是在做蠢事,所以请耐心等待。

tl; dr Rails ActiveSupport 时间和时区在 Alpine Linux 上似乎有错误。当它应该使用冬季时间时,它使用我的时区的 DST 变体(夏令时)。

重现步骤:

  1. 在 Docker Alpine Linux Ruby 镜像中启动一个 shell:
$ docker run -it --rm ruby:2.7.1-alpine sh
Run Code Online (Sandbox Code Playgroud)

以下所有步骤都发生在正在运行的 docker 容器内。

  1. 安装时区数据:
$ apk add --no-cache --update tzdata
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/1) Installing tzdata (2020c-r0)
Executing busybox-1.31.1-r9.trigger
OK: 23 MiB in 37 packages
Run Code Online (Sandbox Code Playgroud)
  1. 打印标准ruby当前时间:
$ ruby -e 'puts Time.now.inspect'
2020-10-28 20:34:24.4817918 +0000
Run Code Online (Sandbox Code Playgroud)

看起来挺好的。时间以 UTC 打印。

  1. 除了 UTC,标准的 rubyTime类只能处理本地时间。这取决于本地系统时区,它可以使用操作系统配置机制进行配置,或者可以简单地通过TZenv var传递给 Ruby 。让我们尝试使用我的时区“欧洲/柏林”:
$ TZ="Europe/Berlin" ruby -e …
Run Code Online (Sandbox Code Playgroud)

ruby time activesupport alpine-linux

13
推荐指数
1
解决办法
783
查看次数

标签 统计

activesupport ×1

alpine-linux ×1

ruby ×1

time ×1