ソース実行
1つのFileをopenして、S3に2回putする
file = File.open('file.csv')
object(key1).put(body: file, **params)
object(key2).put(body: file, **params)
結果(ログ)
2回目のputする時に、retryしているため20秒かかってしまう。
[Aws::S3::Client 200 0.059539 0 retries] put_object(body: ... )
[Aws::S3::Client 200 20.484029 1 retries] put_object(body: ... )
理由
Fileを1回readすると、カーソルが末尾に移動するからです。
file = File.open('file.csv')
=> #<File:purchase.csv>
[93] pry(main)> file.read
=> "header1,header2,header3,header4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n"
[94] pry(main)> file.read
=> ""
Fileを1回利用した後に、seekを利用して、カーソルを先頭に移動すれば解消します。
[99] pry(main)> file = File.open('purchase.csv')
=> #<File:purchase.csv>
[100] pry(main)> file.read
=> "header1,header2,header3,header4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n"
[101] pry(main)> file.seek(0)
=> 0
[102] pry(main)> file.read
=> "header1,header2,header3,header4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n1,2,3,4\n"
修正後に2回putしてみると治っている
Aws::S3::Client 200 0.045818 0 retries] put_object(body:
Aws::S3::Client 200 0.044939 0 retries] put_object(body: