前提・実現したいこと
Qiita記事等1、2を参考にしながら、ローカル環境および Heroku のステージング環境にてアップロードした画像を AWS S3 に保存するよう設定致しました。
設定後、両環境にて画像のアップロードを試したところ、AWS S3 に上手く保存出来ておりませんでした。そちらは以下の方法にて確認致しました。
- アップロードした画像を右クリック → 画像アドレスをコピーしたところ、それぞれの環境で画像アドレスが以下になっていた。
http://localhost:3000/user_images/1.jpg
(ローカル環境)
https://アプリ名.herokuapp.com/user_images/1.jpg
(Heroku のステージング環境)
- AWS S3 のバケット > オブジェクトを確認しても、何もレコードを確認出来なかった。
尚、アップロード時に特にエラーは発生しませんでした。
該当のソースコード
config/environment/deveropment.rb
ruby
1 config.active_storage.service = :amazon
config/environment/production.rb
ruby
1 config.active_storage.service = :amazon
config/environment/storage.yml
ruby
1amazon: 2 service: S3 3 access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> 4 secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %> 5 region: ap-northeast-1 #東京 6 bucket: S3 のバケット名
試したこと
前述の参考サイトの手順とやや異なった事と言えば、私の環境は Windows11 ですので、アクセスキーを設定する際に Vim
をインストールし環境設定の編集も同時に済ませた事くらいです。
ただ rails credentials:show
で設定を確認した所以下の様に上手く表示されましたので、その点は問題ないと思いました。
C:\Users\ユーザー名\app\アプリ名>rails credentials:show aws: access_key_id: AKIAZEMNWDXHF…(省略) secret_access_key: zirfU8ftVfM1cbR…(省略) secret_key_base: d6019fca51c34eba5cb6eb2a5d7027d7d60f…(省略)
どなたかご助言を頂けますと有難いです。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.8p205 (2021-07-07 revision 67951) [x64-mingw32]
RubyGems 3.0.3.1
Rails 5.2.6
heroku/7.59.2 win32-x64 node-v12.21.0
VIM - Vi IMproved 8.2
画像周りのコードの追記
users_controller.rb
ruby
1class UsersController < ApplicationController 2 def update 3 @user = User.find_by(id: params[:id]) 4 @user.name = params[:name] 5 if params[:image] 6 @user.image_name = "#{@user.id}.jpg" 7 image = params[:image] 8 File.binwrite("public/user_images/#{@user.image_name}", image.read) 9 end 10 if params[:cover_image] 11 @user.cover_image_name = "#{@user.id}_cover.jpg" 12 cover_image = params[:cover_image] 13 File.binwrite("public/user_cover_images/#{@user.cover_image_name}", cover_image.read) 14 end 15 if @user.save 16 flash[:notice] = "You have successfully updated your profile" 17 redirect_to("/users/#{@user.id}") 18 else 19 render("users/edit") 20 end 21 end 22end
users/edit.html.erb
<%= form_tag("/users/#{@user.id}/update", {multipart: true}) do %> <ul> <li> <div class="col-1">User name</div> <div class="col-2"><input size="40" name="name" maxlength=30 value="<%= @user.name %>"></div> </li> <li> <div class="col-1">Profile picture</div> <div class="col-2"> <input name="image" type="file" accept=".png, .jpg, .jpeg, .gif" id="file_photo" class="file_photo" value="<%= @user.image_name %>"> </div><br> <div class="col-1"></div> <div class="col-2 valid-note">*Please select a file when you need to change the current one.</div> </li> <li> <div class="col-1">Cover picture</div> <div class="col-2"> <input name="cover_image" type="file" accept=".png, .jpg, .jpeg, .gif" id="file_photo2" class="file_photo"> </div><br> <div class="col-1"></div> <div class="col-2 valid-note">*Please select a file when you need to change the current one.</div> </li> </li> </ul> <% end %>
回答1件
あなたの回答
tips
プレビュー