質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Docker

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

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1703閲覧

[carrierwave]本番環境で、一部しか画像が表示されない。(助けてください......)

NaoyaAbe

総合スコア3

Ruby on Rails 5

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Docker

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

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/08/22 09:00

編集2021/08/24 10:09

Docker、devise、carrierwave、rmagick、heroku、circleciを使用してポートフォリオを作成中です。

db/seeds.rbにて、オブジェクト作成時に画像を保存しているのですが、本番環境において下記の画像のように、最初の画像しか表示されません。

予想では、過去のどこかのタイミング(いつかは不明)で画像を読み込むことができており、その時の画像ファイルをキャッシュしたものが表示されているような気がしています。
その線で検索しましたが、解決には至らず...

10日間以上解決できず、本当に抜け出せなくなってしまいました。
どなたか心当たりがありましたら、どんな些細なことでも構いませんのでアドバイスをお願い致します。

コード等の追加など、お伝えしていただければすぐに追加させていただきます!

状況

viewでの画像表示用コードは、

html

1= image_tag muscle.image_url(:thumb) 2 3※ muscleにはMuscleオブジェクトが入っています。 4※ 引数の:thumbは、ImageUploaderにて定義した画像サイズ設定です。

実際の画像が
イメージ説明

出ているエラー内容

$ heroku logs コマンドにて、
** ActionController::RoutingError (No route matches [GET] "/uploads/muscle/image/25/thumb_buttock.jpg"):**
というエラーが表示されています。

試したが解決しなかった方法

  1. Dockerfileにてyarnをインストールし、RUN bin/rails assets:precompile を実行

  また、heroku本番環境でもheroku run bundle exec rake assets:precompile RAILS_ENV=production を実行

  1. 画像へのpathが通ってないかと考えましたが、pathを変えずに画像ファイルを削除してみたところ、ファイルが存在しないエラーが発生するため、pathは正しいと考えています。
  2. dockerからherokuへの画像ファイル渡しができてないと考えましたが、1枚だけ画像が表示されているので、渡せてはいるようです。(怪しい)
  3. 本番環境にてrails:db:resetまたはrails db:migrate:resetを実行後、heroku run rails db:seedを実行
  4. 実行したdockerコンテナのpush方法を下記に載せます。
実行したコマンド $ git push origin <開発ブランチ> $ git push heroku <開発ブランチ>:master (このpushは不必要だと思いますが、一応試してみました。) $ heroku container:login $ heroku container:push web $ heroku container:release web $ heroku run rails db:migrate:reset RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 $ heroku run rails db:seed $ heroku run bundle exec rake assets:precompile RAILS_ENV=production

意味不明な部分

・spec/fixtures配下に配置したテスト用に入れている画像は表示できますが、このディレクトリに画像を入れて、
その入れた画像をオブジェクトに入れようとすると、画像のurlはimage属性に挿入されますが、画像は表示されません。
ここから推測すると、過去に画像をアップできたが、それ以降画像をアップできていないと思われますが、方法がわからず...

image: File.open("#{Rails.root}/spec/fixtures/test_image.jpg")

現在のコード

**config/application.rb** config.assets.initialize_on_precompile = false
**config/environments/production.rb** config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? # 環境変数ではなく「true」を渡してみてもダメでした。
**Dockerfile** FROM ruby:2.6.6 RUN apt-get update -qq && apt-get install -y \ build-essential \ imagemagick \ nodejs \ unzip \ vim RUN curl https://deb.nodesource.com/setup_12.x | bash RUN curl https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update && apt-get install -y nodejs yarn RUN CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \ wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \ unzip ~/chromedriver_linux64.zip -d ~/ && \ rm ~/chromedriver_linux64.zip && \ chown root:root ~/chromedriver && \ chmod 755 ~/chromedriver && \ mv ~/chromedriver /usr/bin/chromedriver && \ sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \ sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \ apt-get update && apt-get install -y google-chrome-stable RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock RUN bundle install COPY . /app RUN bin/rails assets:precompile CMD ["rails", "server", "-b", "0.0.0.0"]

db/seeds.rb

Muscle.create!(name: 'arm', image: File.open("#{Rails.root}/app/assets/images/arm.jpg"))
Muscle.create!(name: 'back', image: File.open("#{Rails.root}/app/assets/images/back.jpg"))
Muscle.create!(name: 'buttock', image: File.open("#{Rails.root}/app/assets/images/buttock.jpg"))

(app/assets/images配下に画像を配置して試した場合)

  または

db/seeds.rb

Muscle.create!(name: 'arm', image: File.open("#{Rails.root}/public/images/arm.jpg"))
Muscle.create!(name: 'back', image: File.open("#{Rails.root}/public/images/back.jpg"))
Muscle.create!(name: 'buttock', image: File.open("#{Rails.root}/public/images/buttock.jpg"))

(public/images配下に画像を配置して試した場合)

```ここに言語を入力 **uploaders/image_uploader.rb** class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end end

Gemfile

1 2ruby 2.6.6 3 4gem 'bootsnap', '>= 1.1.0', require: false 5gem 'bootstrap', '~> 4.3.1' 6gem 'bootstrap4-kaminari-views' 7gem 'carrierwave' 8gem 'coffee-rails', '~> 4.2' 9gem 'counter_culture' 10gem 'devise' 11gem 'devise-i18n' 12gem 'dotenv-rails' 13gem 'faker' 14gem 'fog-aws' 15gem 'haml_lint' 16gem 'haml-rails' 17gem 'jbuilder', '~> 2.5' 18gem 'jquery-rails' 19gem 'kaminari' 20gem 'mini_magick' 21gem 'omniauth', '1.9.1' 22gem 'omniauth-facebook' 23gem 'omniauth-rails_csrf_protection' 24gem 'puma', '~> 3.11' 25gem 'rails', '~> 5.2.1' 26gem 'rails-i18n', '~> 5.1' 27gem 'sass-rails' 28gem 'turbolinks', '~> 5' 29gem 'uglifier', '>= 1.3.0' 30 31group :development, :test do 32 gem 'better_errors' 33 gem 'binding_of_caller' 34 gem 'byebug', platforms: %i[mri mingw x64_mingw] 35 gem 'factory_bot_rails' 36 gem 'pry-rails' 37 gem 'rspec-its' 38 gem 'rspec-rails' 39end 40 41group :development do 42 gem 'bullet' 43 gem 'listen', '>= 3.0.5', '< 3.2' 44 gem 'rubocop' 45 gem 'rubocop-rails' 46 gem 'spring' 47 gem 'spring-watcher-listen', '~> 2.0.0' 48 gem 'web-console', '>= 3.3.0' 49end 50 51group :test do 52 gem 'capybara', '>= 2.15' 53 gem 'rspec_junit_formatter' 54 gem 'selenium-webdriver' 55 gem 'webdrivers' 56end 57 58group :development, :test, :production do 59 gem 'mysql2', '>= 0.4.4', '< 0.6.0' 60end 61 62gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby] 63

この質問を見ていただきありがとうございます。
よろしくお願い致します。

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

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

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

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

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

neko_daisuki

2021/08/31 08:56

表示に成功する画像はgitリポジトリに含まれていて、 かつ開発環境と本番環境で id が一致するものではないでしょうか。 知識がないのですが、herokuは画像のアップロードは出来ないようなので、 デプロイ後にpublicに書きだしたファイルは公開できないんじゃないかと。 上記の通りだとすると、解決策としては id の不一致が問題なので、 ImageUploader の store_dir から id を削除します。 def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/" end そして、このディレクトリに画像を配置し、リポジトリに追加します。
NaoyaAbe

2021/09/04 12:48

アドバイスしていただき、ありがとうございました! def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/" end この形にしたのですが、解決には至りませんでした。 本日解決しました! 物は試しに、awsのS3の環境変数を再度$ heroku config:set S3_SECRET_KEY='●●'の形で渡してみたら、アップロードに成功しました! $ heroku config:get コマンドで取得できたものをコピペして再度config:setしてみただけなのですが、解決しました! なぜ環境変数を変更していないのに動作するようになったのか不明ですが、解決したので解決済みにさせていただきます! (環境変数の末尾にスペース等が含まれてしまってたとか....? でもそれだと、なぜ最初は動いていたのか...)
guest

回答1

0

自己解決

アドバイスしていただき、ありがとうございました!

def store_dir  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/" end

この形にしたのですが、解決には至りませんでした。

本日解決しました!
物は試しに、awsのS3の環境変数を再度$ heroku config:set S3_SECRET_KEY='●●'の形で渡してみたら、アップロードに成功しました!
$ heroku config:get コマンドで取得できたものをコピペして再度config:setしてみただけなのですが、解決しました!

なぜ環境変数を変更していないのに動作するようになったのか不明ですが、解決したので解決済みにさせていただきます!
(環境変数の末尾にスペース等が含まれてしまってたとか....? でもそれだと、なぜ最初は動いていたのか...)

投稿2021/09/04 12:49

NaoyaAbe

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問