teratail header banner
teratail header banner
質問するログイン新規登録
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

3532閲覧

carrierwave 画像更新が反映されていない。

amedama

総合スコア37

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/02/07 18:20

編集2020/02/07 20:19

0

0

質問みてくださりありがとうございます。

前情報

Rails/React/Dockerでアプリ製作中です。
Userのアバターを登録できるようするために、carrierwaveを使っています。
また、編集ページで登録したアバターを変更できるようにしました。

開発環境では、アバター画像の保存先を
Railsアプリ名/public/uploads/user/:user_id/avatar.jpgとし、
React側には画像のURL(ex:http://localhost:3000/uploads/user/avatar/100/avatar.jpeg)
を送ることで、アバターを表示できるようにしました。

起きた問題

最初にアバターを登録すると、
保存先のRailsのディレクトリに正しく保存され、React側でも正しく表示されました。

しかし、次に新しいアバターに編集すると、
保存先のRailsのディレクトリには正しく保存(更新)されますが、React側の表示が編集前の画像のままです。

アドレスバーに直打ちで
http://localhost:3000/uploads/user/avatar/100/avatar.jpeg
とすると以前に登録されている画像のままで、更新がうまくできていないようです。

試してみたこと
  1. ブラウザにキャッシュされているのかな?と思いキャッシュを削除。

  2. Rails/React共に再起動しました。

どちらもダメでした。

知りたいこと、疑問点
  1. Port3000で参照しているavatar.jpegと、Railsディレクトリに保存されているavatar.jpegとが違う理由がよくわからない。
    →なぜリンクしていないのか。
  2. Railsはどこから、どうやって保存した画像を参照しているのか?
  3. Dockerを使って開発しているので、自分で気づけていない何か問題があるのではないか?
  4. そもそも、Railsで更新がうまく行っておらず、DBは以前のままで、ディレクトリの画像だけが更新されているのか?
最後に

最後までみてくださりありがとうございます。
ヒント若しくは、解決策がわかる方いらっしゃいましたら、ご教授よろしくお願いします。
追加で必要な情報があれば追加させていただきます。

追記

docker-compose run すると変更が直後のみ反映されました。
しかし、リアルタイムに同期されないのはなぜなんでしょうか・・・・
毎回runするわけには行かないし。。。

docker

1version: '3' 2services: 3 api: 4 build: ./rails 5 ports: 6 - '3000:3000' 7 command: /bin/sh -c "bundle exec rails s -p 3000 -b '0.0.0.0'" 8 volumes: 9 - ./rails:/app:cached 10 - bundle:/usr/local/bundle:cached 11 depends_on: 12 - psql 13 psql: 14 image: postgres 15 volumes: 16 - psql:/var/lib/postgresql/data 17 ports: 18 - '5432:5432' 19 20volumes: 21 psql: 22 bundle:
追記2

試しに、保存するアバターのファイル名をavatar.jpg→ランダムな文字列.jpegに変更すると、
アバターを編集するリクエスト後に帰ってくる、アバターのURLと
(ex:http://localhost:3000/uploads/user/avatar/37/**c6c2151a-7ddb-4270-adb2-0e1b6323ed8c.jpeg**)

その後、Profileページを表示するリクエスト後のレスポンスに含まれているアバターのURL(ex:http://localhost:3000/uploads/user/avatar/37/**9ae5f22c-4179-4d1a-951e-1d7241b1c38b.jpeg**)
が違うことに気付きました。
前者のURLには正しく画像が表示され、後者のURLにはNo route matchesと画像の表示はされません。
以降、リクエストのたびに後者のURLが送られてきます。
なぜ....

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問