Ruby on Rails夏时制检测在最近的“ ruby​​:2.7.1-alpine”容器中不起作用

问题描述

使用最新的ruby:2.7.1-alpine容器的Ruby on Rails打破了时区夏令时支持

irb(main):004:0> Time.zone.to_s
=> "(GMT+01:00) Europe/Berlin"
irb(main):005:0> Time.zone.parse("2020-08-27").zone
=> "CEST"
irb(main):006:0> Time.zone.parse("2020-12-27").zone
=> "CEST"

由于夏令时,2020-12-27实际上应该是CET。在本地安装ruby和以前的容器时,它可以正常工作并返回:

irb(main):006:0> Time.zone.to_s
=> "(GMT+01:00) Europe/Berlin"
irb(main):007:0> Time.zone.parse("2020-08-27").zone
=> "CEST"
irb(main):008:0> Time.zone.parse("2020-12-27").zone
=> "CET"

Dockerfile如下所示:

FROM ruby:2.7.1-alpine

# Add basic packages
RUN apk add --update --no-cache \
      build-base \
      python2 \
      postgresql-dev \
      git \
      nodejs \
      yarn \
      tzdata \
      file \
      # Image processing resources
      gobject-introspection-dev \
      poppler-dev \
      # Test Resources
      chromium-chromedriver \
      chromium \
      harfbuzz \
      nss

workdir /app

# Install standard gems
copY Gemfile* /app/
RUN gem install bundler && \
    bundle config --global frozen 1 && \
    bundle config --local build.sassc --disable-march-tune-native && \
    bundle install -j4 --retry 3

# Install standard Node modules
copY package.json yarn.lock /app/
RUN yarn install

ONBUILD copY . ./

有人对内部结构了解更多吗? 这是铁轨,红宝石或高山包装的问题吗? 任何帮助都会很棒!

更新

我可以使用干净的docker重现此行为,例如:

docker run -it ruby:2.7.1-alpine  /bin/sh

   0 apk add --update --no-cache build-base sqlite-dev nano nodejs yarn tzdata
   1 gem install rails
   2 rails new timzone_test
   3 rails webpacker:install
   4 nano config/application.rb # add config.time_zone = 'Europe/Berlin'
   5 rails console

此全新安装中存在相同的问题

Loading development environment (Rails 6.0.3.4)
irb(main):001:0> Time.zone.parse("2020-12-27").zone
=> "CEST"

gem 'tzinfo-data'添加到Gemfile后,一切按预期进行:

Loading development environment (Rails 6.0.3.4)
irb(main):001:0> Time.zone.parse("2020-12-27").zone
=> "CET"

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...