質問編集履歴
2
情報を追記しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,10 +4,12 @@
|
|
4
4
|
AWS上でRails + Nginxでシステム運用しており、ファイルのアップロードはCarrierwave、アップロード先はAWSのS3を用いております。
|
5
5
|
AWSはt2 micro(メモリ1G)を使用しています。
|
6
6
|
|
7
|
+
ページにダウンロードリンクが存在し、クリックするとS3上のファイルをそのPCにダウンロードする流れです。
|
7
|
-
|
8
|
+
しかしダウンロードしようとすると502 Bad Gatewayエラーがブラウザ上には表示され、railsログには「nomemoryerror (failed to allocate memory)」エラーが出ている状況です。
|
8
|
-
Railsのコントローラは下記のようにコーディングしています。
|
9
9
|
|
10
|
+
Railsのビューとコントローラは下記のようにコーディングしています。
|
10
11
|
|
12
|
+
|
11
13
|
vmstatでメモリを見てみると初期状態でfreeは520M程度であり、300M程度の動画をダウンロードを開始すると一気に下がっていき、60M付近でエラーとなりpumaがタスクキルされてしまうような流れです。
|
12
14
|
|
13
15
|
少々古い記事ですが、下記URLに大きいファイルをダウンロードする際のコードが書いてあるのですが、S3の場合どのようにすればよいのか分からずこちらに質問させていただきました。
|
@@ -35,7 +37,11 @@
|
|
35
37
|
でメモリ不足になっていそうです。
|
36
38
|
|
37
39
|
```ruby
|
40
|
+
# ビュー
|
41
|
+
<a href="/dl/movie/id}">ダウンロード</a>
|
38
42
|
|
43
|
+
|
44
|
+
# コントローラー
|
39
45
|
def download
|
40
46
|
user = User.find_by(id: params[:user_id])
|
41
47
|
client = Aws::S3::Client.new(
|
1
状況を追記しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -25,6 +25,15 @@
|
|
25
25
|
ELB
|
26
26
|
S3
|
27
27
|
|
28
|
+
|
29
|
+
ーーーーーーーーーー 追記 ーーーーーーーーーー
|
30
|
+
|
31
|
+
調査してみると、ダウンロード時の「data.read」ではなく
|
32
|
+
data = client.get_object(:bucket => Bucket_name,
|
33
|
+
:key => user.movie.path).body
|
34
|
+
|
35
|
+
でメモリ不足になっていそうです。
|
36
|
+
|
28
37
|
```ruby
|
29
38
|
|
30
39
|
def download
|