ジョギング
- 香椎浜 x 2 周
- 引き続き, 徹底的に熱い (暑いではなく, もはや熱い)
日課
- (腕立て x 50 + 腹筋 x 50) x 3
熱中症気味
油断して 10 時過ぎに走りに行ってしまった為, その後, ひどい頭痛と倦怠感があってダラダラ過ごしていた.
今日のるびぃ ~ 例外 ~
例外の理解がイマイチなので, パターン別に挙動を確認する. 尚, irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
パターン 1
# パターン 1-1 (StandardError を継承している場合) class MyError1 < StandardError; end begin raise MyError1 rescue => e puts "StandardError!!" end puts "End" # irb での出力結果 ... 略 ... StandardError!! => nil irb(main):008:0> puts "End" End => nil # パターン 1-2 (StandardError を継承していない場合) class MyError1; end begin raise MyError1 rescue StandardError => e puts "StandardError!!" end puts "End" # irb での出力結果 StandardError!! => nil irb(main):008:0> puts "End" End => nil
- 任意のクラス (例: MyError1) が StandardError を継承している場合には, StandardError で例外が捕捉される
- StandardError を明示的に継承していない場合でも, StandardError で例外が捕捉される
パターン 2
# パターン 2 class MyError1 < StandardError; end begin raise MyError1 rescue MyError1 => e puts "MyError1" rescue StandardError => e puts "StandardError!!" end puts "End" # irb での出力結果 ... 略 ... MyError1 => nil irb(main):010:0> puts "End" End => nil
- 例外オブジェクトのクラスは MyError1 なので, 7 行目の MyError1 で rescue される
- StandardError を継承している場合でも, 例外オブジェクトのクラス名で rescue されていれば, そちらの方が優先される
パターン 3
# パターン 3 class MyError1 < StandardError; end class MyError2 < MyError1; end begin raise MyError1 rescue MyError2 => e puts "MyError1" rescue StandardError => e puts "StandardError!!" end puts "End" # irb での出力結果 ... 略 ... StandardError!! => nil irb(main):011:0> puts "End" End => nil
- 例外オブジェクトのクラスは MyError1 なので, MyError2 では rescue 出来ずに, その次の StandardError で rescue される
パターン 4
# パターン 4 class MyError1 < StandardError; end class MyError2 < MyError1; end begin raise MyError2 rescue MyError1 => e puts "MyError1" rescue StandardError => e puts "StandardError!!" end puts "End" # irb での出力結果 ... 略 ... MyError1 => nil irb(main):011:0> puts "End" End => nil
- 例外オブジェクトのクラスは MyError2 だが, MyError2 は MyError1 を継承している為, MyError1 でも rescue される
パターン 5
# パターン 5 class Error1 < StandardError; end class Error2 < Error1; end begin raise Error2 rescue Error1 => ex puts ex.class end # irb での出力結果 ... 略 ... Error2 => nil
- 例外オブジェクトのクラスは MyError2 だが, MyError2 は MyError1 を継承している為, MyError1 でも rescue される
- また
ex.class
で例外オブジェクトのクラス名を取得している
今日の AWS ~ S3 ~
ストレージクラス
S3 の整合性について
- S3 は格納したデータを複数のデータセンターに複製することで高いデータ耐久性を実現している
- 但し, 書き込み, 更新, 削除時のデータの整合性について注意が必要となる
以下, オブジェクトに対するアクション毎にざっくりと整理.
オブジェクトに対するアクション | 整合性の種類 | メモ |
---|---|---|
新規書き込み | 書き込み後の読み取り整合性 | アップロード直後は, オブジェクトにアクセス出来ないことがある |
上書き書き込み | 結果整合性 | 上書き後, オブジェクトにアクセスしても古いデータが返されることがある |
削除 | 結果整合性 | 削除後, 削除したはずのデータにアクセス出来ることがある |
フムフム.