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

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

ただいまの
回答率

87.59%

Rails6のデプロイの際に「The page you were looking for doesn't exist」が発生する問題

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 372

score 17

作ろうとしているアプリケーションの概要

Railsを用いて、ユーザーがログイン後に、一覧に乗っている映画に投票し、その投票結果に応じて一覧ページの映画の並び順が変わるという簡単なWEBアプリケーションです。

テーブルは、個々の映画情報を格納した「Movieテーブル」と、個々のユーザー情報を格納した「Userテーブル」と、どのユーザーがどの映画に投票したかと言う「Voteテーブル」(中間テーブル)を用意しました。

ActiveRecord::Schema.define(version: 2020_10_14_063658) do

  create_table "movies", force: :cascade do |t|
    t.string "title"
    t.text "story"
    t.string "image"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.integer "points"
  end

  create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "email"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.string "password_digest"
    t.index ["email"], name: "index_users_on_email", unique: true
  end

  create_table "votes", force: :cascade do |t|
    t.integer "user_id"
    t.integer "movie_id"
    t.text "comment"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

end

今回発生している問題

ローカル環境上では特に問題なく、ユーザー詳細ページにアクセスできていたが、本番環境上でユーザー詳細ページにアクセスしようとすると「The page you were looking for doesn't exist」が表示されてしまう。

開発者ツールを使って見たら、これは自分の推測ですが、「/users/1」(1はユーザーのid)の1を「1」という名前のファイルがあるという風にコンピュータが勘違いしているのだと考えています。

実際に試したこと

・ config.assets.compile = false を config.assets.compile = true に書き換えた。
・ turbolinksの完全無効化(gemをコメントアウトし、読み込みを行っている部分もコメントアウトした)
・ rootパスの定義

問題があると思われる部分

ユーザー詳細ページのコード

<%= provide(:title, @user.name) %>


<div class="user bg-light p-4 rounded">
    <h1 class="text-muted"><i class="fas fa-address-card text-muted mr-1"></i> プロフィール</h1>

    <div class="d-flex mt-4">
        <div class="border border-dark rounded p-3 w-50 mr-2 text-center text-muted">
            <h4><i class="fas fa-file-signature text-muted mr-1"></i>name</h4>
            <%= @user.name %>
        </div>

        <div class="border border-dark rounded p-3 w-50 ml-2 text-center text-muted">
            <h4><i class="fas fa-envelope-square text-muted mr-1"></i> email</h4>
            <%= @user.email %>
        </div>
    </div>
</div>

<br />
<% if current_user && current_user == @user %>
    <%= link_to '編集する', edit_user_url(current_user), class: 'btn btn-primary' %>
    <%= link_to '削除する', user_url(@user), method: :delete, data: {confirm: "削除しますか?"} ,class: 'btn btn-danger' %>
<% end %>

<hr />
<%= 'ユーザーが投票した作品の一覧' %>
<br>
<br>
<div class="bg-light mb-4 rounded" style="width: 100%;">
    <% if @movies != [] %>
        <div class="d-flex flex-wrap justify-content-around">
            <%# 同じ映画複数回投票した場合に、重複を防ぐ %>
            <% @movies.uniq.each do |movie| %>
                <div class="card mt-4 mb-4" style="width: 18rem;">
                    <% if movie.image? %>
                        <%= image_tag movie.image.url, style: 'height: 400px;' %>
                    <% end %>
                    <div class="card-body">
                        <h5 class="card-title"><%= movie.title %></h5>
                        <p class="card-text"><%= text_num_over(movie.story) %></p>
                    </div>
                    <%= link_to '詳しく見る', movie_url(movie), class: "m-3 btn btn-primary" %>
                </div>
            <% end %>
        </div>
    <% else %>
        <%= 'ユーザーが投票した作品はありません' %>
    <% end %>
</div>
  def index
    @users = User.all
  end

  def show
    @user = User.find(params[:id])
    @votes = Vote.where(user_id: @user.id)

    # ユーザーが投票ないしは、コメントした映画情報を格納する配列
    @movies = movies(@votes)
  end
    def movies(vote_arr)
        # ユーザーが投票ないしは、コメントした映画情報を格納する配列
        movies = []
        vote_arr.each do |vote|
            movies << Movie.find(vote.movie_id)
        end
        return movies
    end

イメージ説明

不足しているリソースなどは、必要に応じて掲載させていただきます。ご回答お待ちしております。
よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hatsu

    2020/10/15 23:41

    herokuのログをみたいです。
    heroku logs -tとやってエラージにアクセスしたときのログをはっていただけますでしょうか。
    UserID1番のユーザーがいない、heroku run rails db:migrateをやってないあたりが原因かなと思っていたりします。

    キャンセル

  • msy7822

    2020/10/15 23:53

    わかりました!

    キャンセル

  • hatsu

    2020/10/16 00:02

    /users/1にアセクスしたときに404になっているのがログから確認できます。
    UserID1番のユーザーは本番のDBに存在しますでしょうか?
    たとえば
    1. heroku run rails c
    2. User.find(1)
    という手順でおこなってUserID1番のユーザーは表示さたら存在するかと。

    キャンセル

  • msy7822

    2020/10/16 00:07

    表示はされています!

    キャンセル

回答 1

checkベストアンサー

+1

ログ見ると
Couldn't find Movie with id=1のようになっていますね
たぶんここ Movie.find(vote.movie_id)ですね。つまりvote.movie_idが1のときにMovieの1番のデータがないのかな、と。なのでデータを用意したら解決する気がします。

また

        movies = []
        vote_arr.each do |vote|
            movies << Movie.find(vote.movie_id)
        end
        return movies


Movie.where(id: vote_arr.pluck(:movie_id))


とも書けそうです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/10/16 00:47

    丁寧なご回答ありがとうございます!!

    キャンセル

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

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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