前提・実現したいこと
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/
※下層ページでエラーが発生します。
回答する上で「こういった情報が欲しい」というのがあれば、随時追記していきます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/18 04:40
2019/09/18 07:10