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

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

新規登録して質問してみよう
ただいま回答率
87.20%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails

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

Docker

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

解決済

本番環境で時間をおいてアクセスすると画像が表示されなくなる件について

Engineer_traine
Engineer_traine

総合スコア17

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails

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

Docker

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

2回答

0評価

0クリップ

594閲覧

投稿2021/10/08 04:17

前提・実現したいこと

ポートフォリオでカフェを登録できるようなもの作成をしている最中なのですがタイトルにもある通り
画像が表示されなくなることについて解決できず困っています。
具体的に経緯としては画像を登録した直後や少しの間は表示されるのですが時間が経過して再度
アクセスすると画像が表示されなくなってしまいます。
background imageやトップページにある画像等は表示されますがcrud処理の方でcreateで
画像を登録する方が表示されなくなります。
nameやaddressカラムは表示されます。
herokuで使用されているdbを確認してみましたがデータは登録されていました。
なにか原因のわかる方いましたらどうかお力を貸していただきたいです。
イメージ説明

該当のソースコード

<%= render "shared/error_messages", obj: @cafe %> <%= form_with(model: cafe) do |form| %> <div class="cafe_form"> <div class="field"> <%= form.label :イメージ画像 %> <%= form.file_field :image %> </div> <div class="field"> <%= form.label :店名 %> <%= form.text_field :name %> </div> <div class="field"> <%= form.label :住所 %> <%= form.text_field :address %> </div> <div class="field"> <%= form.label :営業時間 %> <%= form.time_select :business_hours %> <%= form.time_select :end_business_hours %> </div> <div class="field"> <%= form.label :コンセント席数 %> <%= form.number_field :number_seats %> </div> <div class="field"> <%= form.label :wifi %> <%= form.check_box :wifi %> </div> <div class="actions"> <%= form.submit %> </div> <div class="back_link"> <%= link_to '戻る', caves_path %> </div> </div> <% end %>
<% provide(:title, "cafe") %> <%= render "shared/login_header" %> <div class="main"> <div class="search_cafe"> <%= search_form_for @q do |f| %> <div class="search_cafe_field"> <%= f.search_field :name_or_address_cont, :placeholder => "店名" %> </div> <%= f.submit "検索", class: "search_button" %> <% end %> </div> <div class="index_title">カフェ一覧</div> <div class="cafe_container"> <% @caves.each do |cafe| %> <div class="smaller_container"> <div class="cafe_information"> <div class="cafe_card"> <div class="cafe_img"> <% if cafe.image? %> <%= image_tag cafe.image.url %> <% else %> <p>画像なし</p> <% end %> </div> <div class="cafe_name"> <%= link_to cafe_path(cafe.id) do %> <%= cafe.name %> <% end %> </div> </div> </div> </div> <% end %> <%= paginate @caves %> </div> </div>
class ImageUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: include CarrierWave::RMagick # include CarrierWave::MiniMagick # Choose what kind of storage to use for this uploader: storage :file # storage :fog # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end # Provide a default URL as a default if there hasn't been a file uploaded: # def default_url(*args) # # For Rails 3.1+ asset pipeline compatibility: # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) # # "/images/fallback/" + [version_name, "default.png"].compact.join('_') # end # Process files as they are uploaded: # process scale: [200, 300] process :resize_to_limit => [700, 700] process :convert => 'jpg' # # def scale(width, height) # # do something # end # Create different versions of your uploaded files: version :thumb do process :resize_to_limit => [300, 300] end # Add an allowlist of extensions which are allowed to be uploaded. # For images you might use something like this: def extension_allowlist %w(jpg jpeg gif png) end # Override the filename of the uploaded files: # Avoid using model.id or version_name here, see uploader/store.rb for details. def filename super.chomp(File.extname(super)) + '.jpg' if original_filename.present? time = Time.now name = time.strftime('%Y%m%d%H%M%S') + '.jpg' name.downcase end end end
class CavesController < ApplicationController before_action :set_cafe, only: [:show, :edit, :update, :destroy] # GET /caves or /caves.json def index @q = Cafe.ransack(params[:q]) @caves = @q.result(distinct: true).page(params[:page]).per(8) end # GET /caves/1 or /caves/1.json def show end # GET /caves/new def new @cafe = Cafe.new end # GET /caves/1/edit def edit end # POST /caves or /caves.json def create @cafe = Cafe.new(cafe_params) @cafe.user_id = current_user.id respond_to do |format| if @cafe.save format.html { redirect_to @cafe, notice: "登録しました" } format.json { render :show, status: :created, location: @cafe } else format.html { render :new, status: :unprocessable_entity } format.json { render json: @cafe.errors, status: :unprocessable_entity } end end end # PATCH/PUT /caves/1 or /caves/1.json def update respond_to do |format| if @cafe.update(cafe_params) format.html { redirect_to @cafe, notice: "更新しました" } format.json { render :show, status: :ok, location: @cafe } else format.html { render :edit, status: :unprocessable_entity } format.json { render json: @cafe.errors, status: :unprocessable_entity } end end end # DELETE /caves/1 or /caves/1.json def destroy @cafe.destroy respond_to do |format| format.html { redirect_to caves_url, notice: "削除しました" } format.json { head :no_content } end end private def set_cafe @cafe = Cafe.find(params[:id]) end def cafe_params params.require(:cafe).permit(:image, :name, :address, :business_hours, :end_business_hours, :number_seats, :wifi, :user_id, :latitude, :longitude) end end

試したこと

heroku pg:psql -c "select * from caves;"
よりherokuで使用されているdbよりtableを確認してみたところデータは登録されています。
また、他のカラムであるnameやaddressは表示されることから画像の登録がうまくできていない
のかとは考えていますが根本的な原因の解明はできていません。

補足情報(FW/ツールのバージョンなど)

使用している環境やgemについてですが下記の通りです。
docker/docker-compose
rails/ruby

gem 'carrierwave'
gem 'rmagick'

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails

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

Docker

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