🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Heroku

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

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1479閲覧

【Laravel Heroku デプロイ】Target class [App\Http\Controllers\MypageController] does not exist.のエラーを解決したい

onoyuu

総合スコア14

Heroku

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

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/09/18 03:57

編集2019/09/18 06:33

前提・実現したいこと

PHP(Laravel/Docker)で商品を表示・登録するシステムを作っています。
ローカルでは正しく動作していたのですが、herokuにデプロイし、下層ページに移動した際、
エラーメッセージが発生しました。
Laravel開発やherokuデプロイに知見のある方いましたら、
エラーの解決策を教えていただけますと幸いです。

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

Target class [App\Http\Controllers\MypageController] does not exist.

ローカルでは読み込まれていたコントローラーが、なぜかherokuでは読み込まれていません。
また、コントローラーが読み込まれていないせいか、トップページでも登録したデータが取得されていません。

該当のソースコード

web.php

PHP

1Route::get('/', 'HomeController@index')->name('home'); 2Route::resource('home', 'HomeController'); 3Route::get('/mypage', 'MypageController@index')->name('mypage'); 4Route::resource('mypage', 'MypageController'); 5Route::get('/goods/{id}', 'GoodsController@show')->name('goods'); 6Route::resource('goods', 'GoodsController'); 7Route::post('/like', 'AjaxLikeController@store'); 8 9Auth::routes();

MyPageController

PHP

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Illuminate\Support\Facades\Auth; 7use Illuminate\Support\Facades\Validator; 8use App\Http\Controllers\Controller; 9use App\Http\Requests\MypageRequest; 10use App\User; 11use App\Goods; 12use App\Category; 13 14class MyPageController extends Controller 15{ 16 public function __construct() 17 { 18 $this->middleware('auth'); 19 } 20 21 /** 22 * Get a validator for an incoming registration request. 23 * 24 * @param array $data 25 * @return \Illuminate\Contracts\Validation\Validator 26 */ 27 protected function validator(array $data) 28 { 29 $err_msg = [ 30 "goods.category" => "カテゴリーは正しい形式で入力してください。" 31 ]; 32 33 return Validator::make($data, [ 34 'goods_name' => 'required|string|max:50', 35 'goods_description' => 'required|string|max:500', 36 'category' => 'required|integer|max:3', 37 'goods_url' => 'required|string|max:1000', 38 'goods_img_src' => 'required|string|max:1000', 39 ], $err_msg); 40 } 41 42 public function index() 43 { 44 // ログインユーザーのIDを取得 45 $id = Auth::id(); 46 47 // DBよりGoodsテーブルの値を取得 48 $goods = Goods::select( 49 'goods.goods_id', 50 'goods.goods_name', 51 'goods.goods_description', 52 'goods.introducer', 53 'goods.goods_url', 54 'goods.goods_img_src', 55 'goods.created_at', 56 'category.category_name' 57 ) 58 ->join('category','goods.category','=','category.category_id') 59 ->where('goods.introducer', $id) 60 ->orderBy('goods.created_at', 'desc') 61 ->get(); 62 63 // 取得した値をビュー「mypage/index」に渡す 64 return view('mypage/index', compact('goods')); 65 } 66 67 public function create() 68 { 69 // 空のGoodsを渡す 70 $goods = new Goods(); 71 72 $categories = Category::select( 73 'category.category_id', 74 'category.category_name' 75 ) 76 ->get(); 77 78 return view('mypage/create', compact('goods', 'categories')); 79 } 80 81 public function store(MypageRequest $request) 82 { 83 // ログインユーザーのIDを取得 84 $user_id = Auth::id(); 85 86 $goods = new Goods(); 87 $goods->goods_name = $request->goods_name; 88 $goods->goods_description = $request->goods_description; 89 $goods->category = $request->category; 90 $goods->introducer = $user_id; 91 $goods->goods_url = $request->goods_url; 92 $goods->goods_img_src = $request->goods_img_src; 93 $goods->save(); 94 95 return redirect("/mypage"); 96 } 97 98 public function edit($id) 99 { 100 // DBよりURIパラメータと同じIDを持つGoodsの情報を取得 101 $goods = Goods::select( 102 'goods.goods_id', 103 'goods.goods_name', 104 'goods.goods_description', 105 'goods.introducer', 106 'goods.goods_url', 107 'goods.goods_img_src', 108 'category.category_name' 109 ) 110 ->join('category','goods.category','=','category.category_id') 111 ->findOrFail($id); 112 113 $categories = Category::select( 114 'category.category_id', 115 'category.category_name' 116 ) 117 ->get(); 118 119 // 取得した値をビュー「mypage/edit」に渡す 120 return view('mypage/edit', compact('goods', 'categories')); 121 } 122 123 public function update(MypageRequest $request, $id) 124 { 125 // ログインユーザーのIDを取得 126 $user_id = Auth::id(); 127 128 $goods = Goods::findOrFail($id); 129 $goods->goods_name = $request->goods_name; 130 $goods->goods_description = $request->goods_description; 131 $goods->category = $request->category; 132 $goods->introducer = $user_id; 133 $goods->goods_url = $request->goods_url; 134 $goods->goods_img_src = $request->goods_img_src; 135 $goods->save(); 136 137 return redirect("/mypage"); 138 } 139 140 public function destroy($id) 141 { 142 $goods = Goods::findOrFail($id); 143 $goods->delete(); 144 145 return redirect("/mypage"); 146 } 147} 148

Procfile

Procfile

1web: vendor/bin/heroku-php-apache2 public/

composer.json

JSON

1{ 2 "name": "laravel/laravel", 3 "type": "project", 4 "description": "The Laravel Framework.", 5 "keywords": [ 6 "framework", 7 "laravel" 8 ], 9 "license": "MIT", 10 "require": { 11 "php": "^7.2", 12 "fideloper/proxy": "^4.0", 13 "laravel/framework": "^6.0", 14 "laravel/tinker": "^1.0", 15 "laravel/ui": "^1.0" 16 }, 17 "require-dev": { 18 "facade/ignition": "^1.4", 19 "fzaninotto/faker": "^1.4", 20 "mockery/mockery": "^1.0", 21 "nunomaduro/collision": "^3.0", 22 "phpunit/phpunit": "^8.0" 23 }, 24 "config": { 25 "optimize-autoloader": true, 26 "preferred-install": "dist", 27 "sort-packages": true 28 }, 29 "extra": { 30 "laravel": { 31 "dont-discover": [] 32 } 33 }, 34 "autoload": { 35 "psr-4": { 36 "App\": "app/" 37 }, 38 "classmap": [ 39 "database/seeds", 40 "database/factories" 41 ] 42 }, 43 "autoload-dev": { 44 "psr-4": { 45 "Tests\": "tests/" 46 } 47 }, 48 "minimum-stability": "dev", 49 "prefer-stable": true, 50 "scripts": { 51 "post-autoload-dump": [ 52 "Illuminate\Foundation\ComposerScripts::postAutoloadDump", 53 "@php artisan package:discover --ansi" 54 ], 55 "post-root-package-install": [ 56 "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 57 ], 58 "post-create-project-cmd": [ 59 "@php artisan key:generate --ansi" 60 ], 61 "compile": [ 62 "@php -r \"file_exists('.env') || copy('.env.heroku', '.env');\"" 63 ] 64 } 65} 66

試したこと

①下記の記事を元にherokuへの設定を行いました。
Laravelをherokuにデプロイする(データベースはMySQL)

②heroku config:setで下記の項目は設定しました。
APP_DEBUG:
APP_ENV:
APP_KEY:
BUILDPACK_URL:
CLEARDB_DATABASE_URL:
DB_DATABASE:
DB_HOST:
DB_PASSWORD:
DB_USERNAME:
LANG:
LD_LIBRARY_PATH:
TZ:

③キャッシュ等は削除してからデプロイしました
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

④composer.jsonに下記の記述を追加しました

"compile": [ "@php -r \"file_exists('.env') || copy('.env.heroku', '.env');\"" ]

参考記事:
LaravelをHerokuにデプロイするまでに最低限やる事。

⑤Procfileの内容を変更し、コミット&プッシュしました。

web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/

参考記事:
Laravelアプリをherokuで動かすチュートリアル

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

PHP 7.3.7
Laravel Framework 6.0.1
Docker Client/Server 19.03.2
MySQL 8.0.17
heroku 7.30.0

現在開発中のアプリ
http://minimart-app.herokuapp.com/
※下層ページでエラーが発生します。

回答する上で「こういった情報が欲しい」というのがあれば、随時追記していきます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

このパターンで確認する事

コミット&プッシュ漏れはありませんか?
大文字、小文字の間違いはありませんか?
heroku run bashでファイルの存在を確認出来ますか?

投稿2019/09/18 04:13

mikkame

総合スコア5036

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

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

onoyuu

2019/09/18 04:40

回答いただきありがとうございます! ・コミット&プッシュ漏れ 念の為確認しましたが、コミット&プッシュ漏れはありません ・大文字、小文字の間違い Web.phpとコントローラーを中心に大文字・小文字の間違いを確かめましたが、 自分の見た限りでは間違いは見つかりませんでした。 ・heroku run bashでファイルの存在を確認 Web.php、コントローラー、Procfile、composer.jsonなど、 関連しそうなファイルの存在は全て確認できました。
onoyuu

2019/09/18 07:10

再度確認したところ、コントローラー名の大文字、小文字の間違いでした。 【修正前】 class MyPageController extends Controller 【修正後】 class MypageController extends Controller お騒がせしてすみませんでした。 教えていただき、本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問