現在の状況
- 非同期通信で、メッセージを入力できるようにしている。
- 本番環境において、メッセージは非同期通信で入力・反映出来ているもの、画像だけ反映されない。
- アセットコンパイルは行った。
- 他の画像は反映されるのに、JavaScriptで
insertAdjacentHTML
で挿入しているところだけ反映されない。 - Herokuによるデプロイは成功しているが、AWS EC2によるデプロイだと、画像が化けてしまう。
使用しているバージョン等
- Rails 6.0.3.4
- ruby 2.6.5
- capistrano 3.15.0
- unicorn 5.4.1
- nginx1
検証キーの様子
うまく行っている部分の画像は、Content-Type
についてきちんとimg/png
と認識している。
うまく行ってない部分の画像は、Content-Type
がtext/html
と認識されている。
(つまり、画像として認識してくれていないと理解。)
現在の配置
画像については、imagesフォルダ内にある。(下の方にあるため画像は途中で切っていますが、この中にあります)
JavaScriptについては、post.js
が対象のファイルとなっている。
現在のコード
ruby
1function post() { 2 const submit = document.getElementById("submit_message"); 3 submit.addEventListener("click", (e) => { 4 const formData = new FormData(document.getElementById("self_compassion")); 5 const XHR = new XMLHttpRequest(); 6 XHR.open("POST", "/troubles", true); 7 XHR.responseType = "json"; 8 XHR.send(formData); 9 XHR.onload = () => { 10 if (XHR.status != 200) { 11 alert(`Error ${XHR.status}: ${XHR.statusText}`); 12 return null; 13 } 14 const item = XHR.response.trouble; 15 const list = document.getElementById("list_messages"); 16 const formText = document.getElementById("content_worry"); 17 if(document.querySelector("#trouble_message_type_trouble").checked) { 18 const HTML_trouble= ` 19 <li class="message-left-side"> 20 <div class="pic-chat"> 21 <img src="images/sad.png" alt="落ち込んでいる画像"> ⇨⭐️実験1 22 </div> 23 <div class="text-chat"> 24 <div class="post-content"> 25 ${item.worry} 26 </div> 27 <div class="post-date"> 28 投稿日時:${item.created_at.slice(0,19)} 29 </div> 30 </li>`; 31 list.insertAdjacentHTML("afterend", HTML_trouble); 32 formText.value = ""; 33 return false; 34 } else (document.querySelector("#trouble_message_type_encouragement").checked) 35 const HTML_encouragement= ` 36 <li class="message-right-side"> 37 <div class="pic-chat"> 38 <img src="/assets/kind.png" alt="励ましている画像"> ⇨⭐️実験2 39 </div> 40 <div class="text-chat"> 41 <div class="post-content"> 42 ${item.worry} 43 </div> 44 <div class="post-date"> 45 投稿日時:${item.created_at.slice(0,19)} 46 </div> 47 </li>`; 48 list.insertAdjacentHTML("afterend", HTML_encouragement); 49 formText.value = ""; 50 return false; 51 }; 52 e.preventDefault(); 53 }); 54} 55window.addEventListener('load', post); 56
状況
- 実験2の場合、ローカル環境とHerokuでは、非同期通信が出来て、画像反映も上手くいっている。
###仮説と実証
-
こちらの記事において教えていただいたこと(アセットコンパイルをし直す等)を一つ一つ試してみた。しかし、今回上手くいかない。
-
画像までの絶対パスがエラーなのか?と思い、「⭐️実験1」のパスに変更。ローカル環境ではリロードしないと読み込まれないことと、AWSの本番環境では、リロードしても画像は表示されない状況。
###教えていただきたいこと
AWSの本番環境において、他のerb
ファイルにあるimg_tag
は問題なく表示されるのに、JavaScript部分の画像だけ反映されないのは何故でしょうか?
今回の実装では、入力ボタンを押すと「画像・メッセージ」が丸ごと表示されるような仕組みになっています。
しかし、丸ごと表示させるような仕組みだと、HTML
に引っ張られて、Content-Type
をimgにさせることは出来ないのでしょうか?
(コールバック関数?と呼ばれるような、JavaScriptにおける読み込まれる順番などを工夫する必要があるのでしょうか?)
JavaScriptの仕組み自体がこれでは無理があるのか、イメージのパスが誤っているのか、わかりません。
どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/19 00:43 編集