问题描述
使用最新的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 (将#修改为@)