はじめに
今回個人アプリにS3を導入する際扱っているのが動画の為、無駄に容量を使用したくなかったのでローカルの方ではS3を使用しないように条件分岐させました。今回はその方法を説明します。
Amazon S3とは
Amazon S3は(Amazon Simple Storage Service)の略で、インターネット経由で使用できるストレージサービスです。主に、画像や動画のファイルの保存に使用します。
特徴としては容量が無制限である事、東京リージョンを使用した場合容量1Gに対して0.025円と安価である事、99.9%の高可用性を持っており、データ消失の心配がほぼない事の主に3つです。
S3のストレージ以外の機能など、詳細に関しては以下の記事も参考にして下さい。
https://service.plan-b.co.jp/blog/creative/4981/
https://dev.classmethod.jp/cloud/aws/cm-advent-calendar-2015-aws-re-entering-s3/
条件分岐方法
S3の生成方法などの説明は省略します。先ずはGemの導入。fog-aws
を使用します。動画保存はcarrierwave
を使用しております。
gem 'carrierwave'
gem 'fog-aws'
以下略
次にuploaderファイルにて条件分岐させる記述をします。
if文を使用し、development(ローカル環境)、test(テスト環境)をファイル形式で保存し、本番環境ではS3に保存するよう条件分岐させています。
class VideoUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
if Rails.env.development?
storage :file
elsif Rails.env.test?
storage :file
else
storage :fog
end
以下略
次にcarrierwaveを使用してる為config/initializers下にcarrierwave.rb
を作成しif文を使用して保存先の条件分岐をします。
CarrierWave.configure do |config|
if Rails.env.production?
config.storage = :fog
config.fog_provider = 'fog/aws'
config.fog_directory = 'バケット名'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: Rails.application.credentials.aws_access_key_id,
aws_secret_access_key: Rails.application.credentials.aws_secret_access_key,
region: 'ap-northeast-1'
}
else
config.storage :file
config.enable_processing = false if Rails.env.test?
end
end
if Rails.env.production?
の中では本番環境でS3に動画を保存する記述、else文の中ではconfig.storage :file
でローカル環境の場合、public/uploades下に動画が保存されるようになります。
config.enable_processing = false if Rails.env.test?
はテスト環境で動画のアップロード処理をスキップさせています。
その他の説明は今回省略します。
最後に
今回は条件分岐に関してこの方法で上手くいきました。S3を動画の保存に使用するのは今回はじめてでしたが、使い勝手は画像とほぼ同じでした。現在限定的な導入方法しか理解出来てないと思うので、もう少し今後も理解を深めていきたいと思います。