質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

3230閲覧

Railsで大きな動画ファイルをs3にアップロードする方法

s.takanosuke

総合スコア22

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2019/02/19 15:54

やりたいこと

Railsで3GB程の動画ファイルを、s3にアップロードしたい。

詳細

動画配信サービスを開発しています。nginx、unicornを使ってサーバを立てています。
ブラウザにアップロードされた動画ファイルをs3に保存したいと考えています。form_forでfile_fieldを用いて動画ファイルを受け取っています。
それをActiveStorageを使ってAWSのs3にアップロードしています。

問題点

400MB以下の動画ならば正常にアップロードされます。(1時間程かかりますが)
400MB以上の動画ファイルをアップロードすると、エラーアラートが表示されてアップロードに失敗します。(そのエラーが出るまでに2時間ほどかかる)

試した事

  • ダイレクトアップロードにする。
  • nginx及びunicornのタイムアウト設定を伸ばす。
  • nginxで最大ファイルサイズ設定を大きくする。
  • nginx-upload-moduleを用いる。

環境

  • Rails: 5.2.1
  • Ruby: 2.5.1
  • OS: CentOS7(AWSのEC2インスタンス)
  • 通信はhttpsです。

質問

  • s3に3GB程の動画ファイルをアップロードするにはどのようにすればよろしいでしょうか?
  • みなさまは普段どのような工夫をして大容量ファイルをs3にアップロードするのでしょうか?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s.takanosuke

2019/02/19 18:14

ありがとうございます!さっそく調べて試してみます! ちなみに、これはアップロード速度が上がる事も期待出来たりしますか? それともただ分割してアップロードするだけでしょうか?
firedfly

2019/02/21 01:56

こんにちは。アップロード速度も上がります。 「並列処理を行うことで、スループットを向上させることができる、またマルチパートの場合は、それに加えて、単一のファイルをPUTした際には通信経路の問題等で失敗してしまったときに全てやり直さないといけないのに比べ、マルチパートであればそのパートだけやり直すことでリカバリができるため、アップロードの安定性の面でもメリットがあります」 参考:https://qiita.com/iogi/items/62f84e0ebfdc7afd9539
s.takanosuke

2019/02/21 18:22

こんにちは!丁寧な解答ありがとうございます。 実際に簡単なプログラムを書いて実装したところ無事にアップロードすることは出来ました。 しかし、これをActiveStorageと共に使用する方法が中々分かりませんでした。。 ActiveStorageを使ったサンプル例とかはありませんよね.. 甘えすぎていることは承知ですが、もしご存じであれば知恵を貸していただきたいでう。
s.takanosuke

2019/02/22 05:12

なるほど、そうなのですね。 先程色々と試したところ、 ローカルの環境で、(アプリケーションサーバのみ)S3にファイルアップロードをすると時間はかかりますが、どんなに大きいファイルでもしっかりとアップロードされます。 しかし、本番環境(Nginxあり)だとダメなようです。 また、Nginxありの場合は正常にアップロードできる場合もプログレスバーの表示も少しおかしいです。0%の状態がずっと続いて、最後に一気に100%まで行きます。 ダイレクトアップロード時に、Nginxとunicornの間で何か行われているのでしょうか??
firedfly

2019/02/22 06:02

一進一退ですね。問いは尽きないでしょうが こちらは「質問への追記・修正の依頼」を書く場所で、他の有識者は見てくれません。 あれこれ試された内容で、別の質問を立てるとよいです。
s.takanosuke

2019/02/22 07:04

おっしゃるとおりです。色々と本当にありがとうございました。
s.takanosuke

2019/02/25 10:55

ありがとうございます!参考にします!
guest

回答2

0

自己解決

自己解決しました。
アップロードが遅いのは、改善しておりませんが
どんな容量の動画でもアップロード出来るようになりました。

原因としては、ブラウザでした。
本番環境時はEdgeを使い、開発時はChromeを使用していました。
しかし、どうやらEdgeがjavascriptに上手く対応しておらず、ダイレクトアップロードに失敗していた模様です。(プログレスバーがバグっていたのもそのせい)

初歩的な原因で大変ご迷惑をおかけしました。
しかし、たくさんの解答により知識を得ることが出来ました。本当にありがとうございました。

投稿2019/02/25 10:58

s.takanosuke

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決しました。
アップロードが遅いのは、改善しておりませんが
どんな容量の動画でもアップロード出来るようになりました。

原因としては、ブラウザでした。
本番環境時はEdgeを使い、開発時はChromeを使用していました。
しかし、どうやらEdgeがjavascriptに上手く対応しておらず、ダイレクトアップロードに失敗していた模様です。(プログレスバーがバグっていたのもそのせい)

初歩的な原因で大変ご迷惑をおかけしました。
しかし、たくさんの解答により知識を得ることが出来ました。本当にありがとうございました。

投稿2019/02/25 11:00

s.takanosuke

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問