DockerでRubyを使う場合の注意点
Last-modified: Tue, 20 Feb 2018 23:00:19 JST (2046d)
Top > DockerでRubyを使う場合の注意点
DockerHubにあるRubyコンテナを使う場合、注意する点が2つあります。
- タイムゾーンがUTC
- 文字コードがUS-ASCII
まず、タイムゾーンがUTCなので、JSTにしたい場合、Docker起動時に環境変数で渡します。
C:\Users\akira>docker run -it -e "TZ=Asia/Tokyo" ruby:2.4 /bin/bash root@67da4786fc69:/# date Tue Feb 20 22:40:39 JST 2018
忘れると、Time.nowで9時間ずれます
activesupportを使うと、
[1] pry(main)> require 'active_support' => true [2] pry(main)> require 'active_support/core_ext' => true [3] pry(main)> Time.now => 2018-02-20 13:49:48 +0000 [4] pry(main)> Time.now.in_time_zone('Japan') => Tue, 20 Feb 2018 22:49:57 JST +09:00
のように変換することもできます。内部処理はすべてUTCにして、必要に応じJSTに変換。という場合はこのようなやり方でも良さそうです。
次に、地味に悩んだのが、文字コードがUTF-8にならない。
Rubyスクリプトには
# -*- coding: utf-8 -*-
とマジックコメントを記載しているのですが、
ArgumentError: invalid byte sequence in US-ASCII
と冷たくあしらわれるgemが時々あります。
外部エンコーディングが設定できなかった場合、US-ASCIIがデフォルトになるようです。
ググると、環境変数LANGを設定するとか、RUBYOPTにセットとか出てきますが、
自分の場合どれも効果はありませんでした。
hoge.encode!("ASCII")
と文字コードを変更しても効果はなく、
結局ソースコード中に
Encoding.default_external = "UTF-8"
と記載したら直りました。
Counter: 288,
today: 2,
yesterday: 1
このページの参照回数は、288です。