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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Heroku

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

2回答

976閲覧

【Laravel6】Herokuにて画像表示を実装中に一部のViewでエラーが起きた(500 server error)

kubotea

総合スコア2

Heroku

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/08/22 10:45

編集2022/01/12 10:55

前提・実現したいこと

Laravel6にて音楽系のWebアプリを作成しています。
今回Herokuにてデプロイした後,挿入していた画像が表示がされなくなり,それに対応するためにControllerとViewを少しいじったのですが,その後当該viewにて500 server errorが起きてしまいました。いじった内容は下記に記載しております。

発生している問題・エラーメッセージ

500 Server Error
GET https://calm-sea-47307.herokuapp.com/artists/1/1 500 (Internal Server Error) ```こちらはGoogleのデベロッパーツールにて取得したエラーです ### 該当のソースコード ```ここに言語名を入力 /g-chord/app/Http/Controllers/LyricController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Lyric; use App\SongTitle; use App\Post; class LyricController extends Controller { public function show($artist_id, $song_title_id) { $lyric = SongTitle::find($song_title_id)->lyrics; $image = base64_encode(file_get_contents($lyric->image)); $posts = Post::all(); return view('Lyric.show')->with(['lyric' => $lyric, 'image' => $image, 'posts' => $posts, 'artist_id' => $artist_id, 'song_title_id' => $song_title_id]); } } ```このコントローラーでいじったのは$image~の部分と,return内にimageを追加したことです。herokuではローカルで出来ていた画像表示ができず,僕はこのバイナリーデータにする方法で試みました。結果としてはローカル内では画像が確認できたのですが,本番環境ではエラーになってしまいました。

/g-chord/resources/views/Lyric/show.blade.php

@extends('layouts.app')

@section('content')
<h1>{{ $lyric->name }}</h1>
<div class="lyric">
<img src="data:image/png;base64,{{ $image }}">
</div>

<h1>コメント</h1> <div class='posts'> @foreach ($posts as $post) <div class='post'> <h2 class='title'>{{ $post->name }}</h2> <p class='body'>{{ $post->content }}</p> <form style="display: inline-block;" method="POST" action="/artists/{{ $artist_id }}/{{ $song_title_id }}/{{ $post->id }}"> @csrf @method('DELETE') <button class="btn btn-danger">削除する</button> </form> </div> @endforeach <form action="/artists/{{ $artist_id }}/{{ $song_title_id }}" method="POST"> @csrf <div class="name"> <h2>ユーザーネーム</h2> <input type="text" name="post[name]" placeholder="タイトル"/> </div> <div class="content"> <h2>内容</h2> <textarea name="post[content]" placeholder="コメント"></textarea> </div> <input type="submit" value="保存"/> </form> </div>

@endsection

### 試したこと Herokuでのmigrateのし直しや,pushも行いました。 ### 補足情報(FW/ツールのバージョンなど) 他に追加した方が良い情報等ありましたらなんなりとお申し付けください。 追記(2021/8/24現在): Laravelのデバッグ機能を使ってみたところ,次のようなエラーが確認できました。 ```ここに言語を入力 file_get_contents(storage/song/タイトル未定.png): failed to open stream: No such file or directory ```ここまでくると自分でもなんとなく予想はつき,パスを書き換える必要があるようなのですが,ローカルでは動いたのに本番では動かない理由だけがイマイチよく分かっておりません。 追記2(2021/8/28現在)回答者様からheroku環境でのシンボリックリンクについて言及がありました。そこでそのことを調べたのですが,[Laravel×Heroku】シンボリックリンクが上手くいかない時の対処法](https://qiita.com/tokiya_takai/items/5afab752c5826e4dcc62)という記事を見つけました。そこではローカル環境とheroku環境でのパスの違いが閲覧できない理由を生んでいると書かれていました。そこでその記事の通り,heroku環境に合わせてローカルのシンボリックリンクを変更しました。しかし今度はローカル環境で動かなくなってしまいました。当該記事でも再設定が必要であると書かれていたのですが,どのように再設定を行うかが調べても判りませんでした。 ```ここに言語を入力 1 ec2-user ec2-user 23 Aug 28 15:03 storage -> /app/storage/app/public

ここでは反映されていないのですが,storageが赤字になっております。画像はシンボリックリンクの場所になっております。変更前はフォルダーだったのですが,変更後はファイルになってしまっているようです。
画像はシンボリックリンクの場所になっております。変更前はフォルダーだったのですが,変更後はファイルになってしまっているようです。

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

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

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

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

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

yuki84web

2021/08/23 11:38

エラーが起きた際にまず確認するのはサーバーおよびシステムのエラーログです。そこにヒントがある可能性が高いからです。
kubotea

2021/08/23 13:11

ご覧頂きありがとうございます。 yukiさんの質問に答えられているかわからないのですが,本番環境における写真を格納した当該ビューには500 server errorとしか書いておりませんでした。ローカル環境では正しく動作しております。一応デベロッパーツールにて取得したエラーも載せておきますが同じようなことが書いてあります。
kubotea

2021/08/24 05:16

今laravelのデバックモードを使ってみたところ,エラー内容が出ました。内容自体はよく見るものなのですが,ローカル環境では表示できて本番ではできないのは何故なのでしょうか。知恵をお貸ししていただけると助かります。
guest

回答2

0

確認ですが、Heroku環境でのシンボリック作成はおすみでしょうか??^^

またNo such file or directoryとのことですので、herokuの中へsshして、想定した場所にファイルが存在するかチェックすると解決の手掛かりになるかもしれないです><

投稿2021/08/27 16:25

kawa_kawawaka

総合スコア71

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

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

kubotea

2021/08/28 06:30

複数の質問にわたって閲覧,そして回答いただきありがとうございます。 回答者様が仰ったことを一度自身で調べ,https://qiita.com/tokiya_takai/items/5afab752c5826e4dcc62 という記事に辿り着きました。ここでは正に回答者様が仰ったheroku環境でのシンボリックリンクについて触れられており,シンボリックリンクが環境の差異を受けることで開くことができないというような旨が書かれておりました。そこでheroku環境に合わせてstorageのリンクを変更したのですが,今度はローカル環境でおかしくなってしまいました。この記事でも再設定が必要だと書かれてたのですが,どのような再設定を行うかが調べても判りませんでした。追加の情報にて詳しい状況を掲示いたしますので,確認いただけますと幸いです。
kawa_kawawaka

2021/08/28 16:39

「heroku環境に合わせてstorageのリンクを変更した」とのことですので、storageのリンクを戻してあげればいいんじゃないかと思います・_・
guest

0

storage以下のファイルへのアクセスは、publicディレクトリとのシンボリックリンクを作成する必要があるのでは?

投稿2021/08/24 11:25

yuki84web

総合スコア1857

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

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

kubotea

2021/08/24 12:39 編集

回答いただきありがとうございます。 説明不足で申し訳ないのですが,シンボリックリンクは作成済みです!そのためローカル環境ではしっかり画像を確認できておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問