現在の状況
railsにてアプリ制作中です。下記のリンク記事の手順通り、AWSへデプロイしました。それに伴い、画像のアップロードはS3にアップしようとしています。 (carrierwave使用)
https://qiita.com/take18k_tech/items/2efd778c8dd9aae9496e
画像投稿は、Userモデル(avater)とMessageモデル(image)に2箇所で行ってます。
2点で違う点は、
Userモデル(avaterカラム)はajaxを使用せず同期通信、
Messageモデル(imageカラム)はajaxを使用して非同期通信
になります。
(開発環境では問題なく動作しておりました。)
問題点
・Messageモデル(imageカラム)は投稿ボタンをクリックすると、POST https://sologol.work/messages 500
がコンソールに表示され、画面は変化しません。DBにも保存されないため、画面を更新しても、表示されません。
・bundle exec cap production deploy
すると、Userモデル(avaterカラム)が全て消えてしまう。
(↑関係あるか分かりませんが、一応記載しておきます)
試したこと
下記のリンクの記事の内容は全て試してみましたが、症状変わりませんでした。
https://qiita.com/siruku6/items/a3a9021913749247d92b
解決したいこと
・Messageモデル(imageカラム)も非同期で問題なく投稿したい。
・Userモデル(avaterカラム)は、デプロイしても消えないようにしたい。
ajaxを使用しないUserモデル(avaterカラム)は保存はできているので、大きな間違いはないかと思うものの、deployすると消えてしまうので、どこかおかしいかとは思っています。
Messageモデル(imageカラム)送信時のエラー文
I, [2021-02-23T21:27:20.322183 #8561] INFO -- : [d468c9ad-2d75-4683-a918-606c06214792] Started POST "/messages" for 122.222.130.5 at 2021-02-23 21:27:20 +0000 I, [2021-02-23T21:27:20.322967 #8561] INFO -- : [d468c9ad-2d75-4683-a918-606c06214792] Processing by MessagesController#create as JS I, [2021-02-23T21:27:20.323052 #8561] INFO -- : [d468c9ad-2d75-4683-a918-606c06214792] Parameters: {"authenticity_token"=>"sSMel+aT37uIJ71fjf6KubS/VEIo93AMLY2avvTM9wLgrO1YsAnN0hAoykJgLuLPOHL2aZtsIinJuxrp79GrgA==", "message"=>{"content"=>"", "image"=>#<ActionDispatch::Http::UploadedFile:0x00007f6b80c75b08 @tempfile=#<Tempfile:/tmp/RackMultipart20210223-8561-iag8bn.JPG>, @original_filename="IMG_9368.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"message[image]\"; filename=\"IMG_9368.JPG\"\r\nContent-Type: image/jpeg\r\n">}, "score_id"=>"1", "commit"=>"メッセージを送信する"} I, [2021-02-23T21:27:20.478504 #8561] INFO -- : [d468c9ad-2d75-4683-a918-606c06214792] Completed 500 Internal Server Error in 155ms (ActiveRecord: 0.0ms | Allocations: 12185) F, [2021-02-23T21:27:20.479145 #8561] FATAL -- : [d468c9ad-2d75-4683-a918-606c06214792] [d468c9ad-2d75-4683-a918-606c06214792] Excon::Error::Forbidden (Expected(200) <=> Actual(403 Forbidden) excon.error.response :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>ED1CF861B3139B93</RequestId><HostId>P7cJlJ1EsJXH2tjAEl2a3Rj2dQK7INZuIjZvDfXbYQBOjV45DZKIT2NiAgRK5NdZqjk6FqJnkk0=</HostId></Error>"
コード
ruby
1# app/controllers/messages_controller.rb 2 def create 3 @message = Message.new(message_params) 4 playing_course = Score.find(params[:score_id]) 5 golfcourse_id = playing_course.golfcourse_id 6 @message.golfcourse_id = golfcourse_id 7 @message.user_id = current_user.id 8 @message.save 9 end 10 11 private 12 13 def message_params 14 params.require(:message).permit(:content, :score_id, :image) 15 end
# app/views/messages/create.js.erb var message_content = document.getElementById( "message_content").value ; var message_length = message_content.length ; var message_image = document.getElementById( "message_image").value ; console.log(message_length) if (message_content == "" && message_image == ""){ console.log("どちらもからです。") alert('メッセージか画像、どちらかは入力して下さい。'); }else if(message_length > 100){ console.log(message_length); alert('メッセージは100文字以内でお願いします。'); }else{ document.getElementById('messages') .insertAdjacentHTML('afterbegin', '<p id="message-<%= @message.id %>" class="score-block__group">\ <% if @message.user.avatar? %>\ <%= image_tag asset_path(@message.user.avatar.url), class: "score-block__img"%>\ <% else %>\ <%= image_tag asset_path("ball.svg"), class: "score-block__img"%>\ <% end %>\ <span><%= link_to @message.user.name, users_show_path(id: @message.user.id) %></span>\ <% if @message.image != nil %>\ <%= image_tag asset_path("#{@message.image}"), class: "thmb" %>\ <% end %>\ <span class="score-block__date-content"><%= @message.content %></span>\ <span class="score-block__date-like">\ <span><%= @message.created_at %></span>\ <a id="unlike-<%= @message.id %>" href ="/messages/<%= params[:score_id] %>?message_id=<%= @message.id %>">0</a>\ <a id="change-like-<%= @message.id %>" data-remote="true" rel="nofollow" data-method="post" href="/likes?message_id=<%= @message.id %>&score_id=<%= params[:score_id] %>&user_id=<%= current_user.id %>">\♡\</a>\ </span>\ </p>'); document.getElementById('message_content').value = '' document.getElementById('message_image').value = '' }
情報不足かもしれません。必要な情報あれば、仰っていただければ、すぐに追記致します。
何卒宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー