前提・実現したいこと
Ruby on Rails5とAmazon Web Serviceを用いて動画投稿型のアプリを作成しています。(cloud9上で)
gem 'carrierwave', '~> 1.0'
gem 'fog-aws'
gem 'aws-sdk-s3', require: false
を用いてAWSのS3へ動画をアップロードし、railsアプリ上で動画が再生可能な実装を試みています。
現在carrierwaveとActivestorageを用いて以下のようなコードでS3に動画を保存はできるのですが、S3のオブジェクトURLを開くとThis XML file does not appear to have any style information associated with it. The document tree is shown below.というエラーが出てしまいます。
S3に動画として保存出来ていないと考えているのですが、原因がわかる方はいらっしゃいますでしょうか。教えていただけると非常に助かります。また動画として保存できていないためrailsアプリ上で動画が再生出来ないのでしょうか?
発生している問題・エラーメッセージ
エラーメッセージ S3でオブジェクトURLを開くと <Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>**********</RequestId> <HostId> ************** </HostId> </Error> と出ます。
該当のソースコード
html
1 <%= f.file_field :video%>
model
1class Tweet < ApplicationRecord 2 mount_uploader :video, VideoUploader 3 4 has_one_attached :video 5 6end
videouploader
1class VideoUploader < CarrierWave::Uploader::Base 2 3 if Rails.env.development? 4 storage :file 5 elsif Rails.env.test? 6 storage :file 7 else 8 storage :fog 9 end 10 11 12 def store_dir 13 "バケット名" 14 end 15 16 17 18 19 def extension_whitelist 20 %w(jpg jpeg gif png mp4) 21 end 22 23 24end
development
1config.active_storage.service = :amazon
environment
1config.active_storage.service = :amazon
storageyml
1test: 2 service: Disk 3 root: <%= Rails.root.join("tmp/storage") %> 4 5local: 6 service: Disk 7 root: <%= Rails.root.join("storage") %> 8 9# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key) 10amazon: 11 service: S3 12 access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> 13 secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %> 14 region: リージョン 15 bucket: バケット名
showhtml
1 <video controls name="media" width="100%" heigth="100%"> 2 <source src=<%= @tweet.video %> type="video/mp4"> 3 </video>
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー