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

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

ただいまの
回答率

87.37%

【Heroku・cakephp3】DebugKitが読み込めない・デプロイするとcomposer.jsonに記載されたものが消える

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,142

score 173

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+1

Herokuはデプロイ時のコマンドで --no-dev オプションをつけます。
この場合はcomposer.jsonのrequire-devに書かれているパッケージをインストールしません。
https://devcenter.heroku.com/articles/php-support#build-behavior

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/12/27 19:02

    ご回答ありがとうございました。
    ご教授いただいた通り、
    debug_kitがrequire-devに記載されていたため、デプロイ時にHeroku側でインストールされていないのが原因でした。
    解決策を自己解決の部分に記載します。
    本当にありがとうございましたm(_ _)m

    キャンセル

+1

CakePHP 標準のプラグインについては、vendor/cakephp-plugins.php に記載されているパスにありますから、通常は vender/cakephp/debug_kit/ 以下にあるはずですが、こちらは確認されましたか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/12/27 14:38

    ご回答ありがとうございます。

    >>通常は vender/cakephp/debug_kit/ 以下にあるはず
    確認したところ、ローカルにはありましたが、Heroku側にはありませんでした。
    Heroku側でcomposer installを実行するとインストールできたのですがエラーが解消されず、
    cakephpのvendorやtmpのパーミッションが700だったので変更しましたがやはりダメでした。

    また、ローカルからデプロイするとインストールしたdebug_kit(他いくつかのvendor以下のもの)が消えてしまいます。
    ローカルとHeroku側のcomposer.jsonは同じなのですが、なぜこのようになってしまうのでしょうか・・・

    引き続き、調べてみたいと思います。
    ご回答頂きありがとうございました。

    キャンセル

  • 2018/12/27 16:26

    Heroku 側で composer install をした後で、vender/cakephp-plugins.php の内容は、正しい debug_kit への向き先になっていましたでしょうか? ファイルがあることと、そのファイルを読み込むこととは同値ではありませんよ。

    キャンセル

  • 2018/12/27 18:59

    ご回答ありがとうございます。
    debug_kitへの向きはあっておりました。が、今回は別の問題でした。
    ですが、debug_kitがあるかどうかや、cakephp-plugins.phpに記載されていることを知らなければ解決できませんでした。勉強になりました。
    お力添えいただきありがとうございました。m(_ _)m

    キャンセル

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で質問しよう!

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

関連した質問

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