cakephp3をローカルにcomposerでインストールし、Herokuにデプロイしたのですが、
DebugKitが読み込めずエラーでページの表示ができません。
ローカルなら問題なく表示&ロードができているため、デプロイしたHerokuの方が問題かと思います。
src/Application.php
のDebugKitロードの記述をコメントアウトすれば、Herokuも表示できるようになります。
pluginsディレクトリはローカルもHeroku側も空です。
(cakephp3はデフォルトでDebugKitが内蔵されているはずなので)
パスがおかしいのでしょうか?なぜ読み込めないのか、調べても出てこずお手上げ状態です。
何卒、よろしくお願い致します。
【エラー内容】
Error: The application is trying to load a file from the DebugKit\Plugin plugin.
Make sure your plugin DebugKit\Plugin is in the /app/plugins/ directory and was loaded.
【ディレクトリ構造】
ローカルはmyappディレクトリ以下にcakephpが入っています。
myapp (Herokuだとappディレクトリ)
∟.git
∟bin
∟composer.json
∟composer.lock
∟config
∟plugins
∟src
∟tmp
∟vendor
∟webroot
∟など
追記
Herokuへデプロイした際に、/app/vendor/cakephp/以下のdebug_kitが消えてしまっていることがわかりました。
ローカルとHeroku上のcomposer.jsonは同じなのですが、デプロイすると一部インストールができていないようです。
(debug_kit以外にもいくつかのvendor以下のものが消えている)
また、パーミッションもローカルで実行したものとは異なります。
原因がわかりましたらご回答いただけますと幸いです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
Herokuはデプロイ時のコマンドで --no-dev
オプションをつけます。
この場合はcomposer.jsonのrequire-devに書かれているパッケージをインストールしません。
https://devcenter.heroku.com/articles/php-support#build-behavior
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
CakePHP 標準のプラグインについては、vendor/cakephp-plugins.php に記載されているパスにありますから、通常は vender/cakephp/debug_kit/ 以下にあるはずですが、こちらは確認されましたか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
原因
お二方にご回答いただいた通り、
①cakephpのDebugKitはcomposer.jsonの"require-dev"に記載されているので、
Herokuにデプロイするときは"require-dev"は無視され、インストールされません。
そのため、Heroku側でのみDebugKitが読み込めないエラーが出ていました。
(Herokuにログインして自分でcomposerコマンドを叩くときは--no-devオプションをつけていないので、DebugKitがインストールされる。デプロイするとまた消える。)
②さらに、DebugKitはapp.phpのデバッグモードがtrueになっているときに読み込まれます。
'debug' => filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN)
今回、これがtrueになっていたので、DebugKitを読み込んだが、Heroku側にはDebugKitが無いのでエラーになった。
解決方法
Heroku側が本番環境なので、app.phpのデバッグモードは基本的にfalseにしてOFFにしておく。
Heroku用のapp.phpを作ってHerokuではそちらを読むようにする。
(そうするとDebugKit自体を読み込まないのでエラーも出ない。)
※ただし、debugモードOFFで、cakephp3をインストールして最初に表示できるデフォルトのページを開くとエラーになります。
Please replace src/Template/Pages/home.ctp with your own version.
cakephpのデフォページはdebugモードONでなければ表示できないようになっています。
(開発するなら使わないので特に気にしないで良いと思います)
もしくは、composer.jsonのDebugKitの設定を"cakephp/debug_kit": "^3.17.0",
"require-dev"から"require"に移動させて絶対インストールするようにしておく。
debugモードOFFなら基本読み込まれないし、DebugKitのパネルの無効化・有効化の設定ができるので、
本番でも開発環境でも別にDebugKitがインストールされていても個人的には問題ないかなと思いました。
ご回答いただいたみなさま、ありがとうございました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/12/27 19:02
ご教授いただいた通り、
debug_kitがrequire-devに記載されていたため、デプロイ時にHeroku側でインストールされていないのが原因でした。
解決策を自己解決の部分に記載します。
本当にありがとうございましたm(_ _)m