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

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

詳細はこちら
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

Q&A

解決済

2回答

4894閲覧

`composer install`済みだが`bin/cake migrations`などのコマンドが見つからない

yme2zk

総合スコア21

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

0グッド

0クリップ

投稿2019/10/21 08:47

編集2019/10/23 00:50

前提・実現したいこと

Vagrant環境にて、CakePHP3のmigrationsを実行しようとしたのですが、
Composer install済みであるにもかかわらずコマンドが無いと表示されてしまいます。
migrationsに限らず、bake等もできない状態です。

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

vagrant ssh $ cd /Path/to/src $ sh bin/cake migrations status Exception: Unknown command `cake migrations`. Run `cake --help` to get the list of valid commands. in [/srv/httpd/vendor/cakephp/cakephp/src/Console/CommandRunner.php, line 346]

試したこと

bin/cake -hでコマンドの有無を確認すると以下の結果となりました。

Current Paths: * app: src/ * root: /srv/httpd/ * core: /srv/httpd/vendor/cakephp/cakephp/ Available Commands: - help - version To run a command, type `cake command_name [args|options]` To get help on a specific command, type `cake command_name --help`

確かにコマンドが存在していない様なのですが、vender/cakephp以下には該当のフォルダが存在しており、
composer show | grep cakephpを行った結果も下記の通りです。

cakephp/bake 1.9.5 Bake plugin for CakePHP 3 cakephp/cakephp 3.7.9 The CakePHP framework cakephp/cakephp-codesniffer 3.1.1 CakePHP CodeSniffer Standards cakephp/chronos 1.2.8 A simple API extension for DateTime. cakephp/debug_kit 3.18.0 CakePHP Debug Kit cakephp/migrations 2.3.0 Database Migration plugin for CakePHP 3.0 based on P... cakephp/plugin-installer 1.1.1 A composer installer for CakePHP 3.0+ plugins.
  • vender以下を削除、再度composer installを実行

→状況変わらず。実行中に以下のwarningが大量に出続けていました。

warning: cannot set modif./access times for /srv/httpd/vendor/composer/23b5a519/cakephp-bake-b1fa1d2/ Operation not permitted warning: cannot set permissions for /srv/httpd/vendor/composer/23b5a519/cakephp-bake-b1fa1d2/ Operation not permitted warning: set times/attribs failed for /srv/httpd/vendor/composer/23b5a519/cakephp-bake-b1fa1d2/
  • vagrantをdestroyして再度up

→状況変わらず

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

win10、Vagrant + Virtualbox、CentOS7、php7.3、CakePHP3.7.9
同じvagrantをmacで実行すると、問題なく動作していました。
(vagrant upを行った段階で、composer installも済んでいる状態です)

これまでに、この様なことが起こったことがなく、
また、今のところOSでの挙動の違いしかわかっておりません。
他に確認すべきところなどありましたらご教授いただけると幸いです。

追記

Application.php

class Application extends BaseApplication { /** * {@inheritDoc} */ public function bootstrap() { // Call parent to load bootstrap from files. parent::bootstrap(); if (PHP_SAPI === 'cli') { $this->bootstrapCli(); } else { // Load more plugins here $this->addPlugin('Froala'); } /* * Only try to load DebugKit in development mode * Debug Kit should not be installed on a production system */ if (Configure::read('debug')) { $this->addPlugin(\DebugKit\Plugin::class); } } /** * Setup the middleware queue your application will use. * * @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to setup. * @return \Cake\Http\MiddlewareQueue The updated middleware queue. */ public function middleware($middlewareQueue) { $middlewareQueue // Catch any exceptions in the lower layers, // and make an error page/response ->add(new ErrorHandlerMiddleware(null, Configure::read('Error'))) // Handle plugin/theme assets like CakePHP normally does. ->add(new AssetMiddleware([ 'cacheTime' => Configure::read('Asset.cacheTime') ])) // Add routing middleware. // If you have a large number of routes connected, turning on routes // caching in production could improve performance. For that when // creating the middleware instance specify the cache config name by // using it's second constructor argument: // `new RoutingMiddleware($this, '_cake_routes_')` ->add(new RoutingMiddleware($this)); $cookies = new EncryptedCookieMiddleware(['rememberMe'], Configure::read('Security.cookieKey')); $middlewareQueue->add($cookies); return $middlewareQueue; } /** * @return void */ protected function bootstrapCli() { try { $this->addPlugin('Bake'); } catch (MissingPluginException $e) { // Do not halt if the plugin is missing } $this->addPlugin('Migrations'); // Load more plugins here } }

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

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

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

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

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

nojimage

2019/10/21 09:17

bin/cake plugin loaded の結果はどうなっていますか?
yme2zk

2019/10/21 10:05 編集

ありがとうございます。 bin/cake plugin loaded の結果は以下です。 ``` Exception: Unknown command `cake plugin`. Run `cake --help` to get the list of valid commands. in [/srv/httpd/vendor/cakephp/cakephp/src/Console/CommandRunner.php, line 346] ```
nojimage

2019/10/21 11:15

helpの出力通り、help, version以外のシェルタスクが読み込まれていない状態ですね。となると、App\Applicationクラスでconsole, pluginConsoleを上書きしている or DIRECTORY_SEPARATORが”\”になってしまっているとかでしょうか。 Application.phpの確認と、php -r "echo DIRECTORY_SEPARATOR;" で、定数の確認をしてみたください。
nojimage

2019/10/21 11:29

warningの内容からして、WSL上でvagrantを動かしていたりしますか?
yme2zk

2019/10/21 12:10

php -r "echo DIRECTORY_SEPARATOR;" の結果は「/」でした。 Application.phpを確認しましたが、特に書き換えなどは行っていないようです。 (念のため中身を追記しました。) Vagrant + Virtualboxで、WSL上では動かしておりません。
guest

回答2

0

同じような事象に遭いましたが、 composer update することで解決しました。

投稿2022/02/17 05:33

dewahajimeyou

総合スコア31

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

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

0

ベストアンサー

直接の原因は判りませんが、どのあたりに問題があるかは判りますので参考にしてください。

TL;DR Cake\Console\CommandScanner::scanDir の挙動を確認してください。

bin/cake -h の結果で、Available Commandsが "help", "version" のみということは、CakePHP本体のShellコマンドも呼び出されていない状態です。

"help", "version"のみ、コマンドが表示されるのは、以下のようにCommandRunnerクラスにて読み込みがハードコーディングされているためです。

php

1 public function run(array $argv, ConsoleIo $io = null) 2 { 3 $this->bootstrap(); 4 5 $commands = new CommandCollection([ 6 'version' => VersionCommand::class, 7 'help' => HelpCommand::class, 8 ]); 9 $commands = $this->app->console($commands); 10 $this->checkCollection($commands, 'console');

cakephp/CommandRunner.php#L134 at 3.7.9 · cakephp/cakephp

他のコマンドはどこで読み込まれているのかというと、その下の$commands = $this->app->console($commands); の部分で、Application::console()を呼び出してセットしています。

Applicationは、Cake\Http\BaseApplicationを継承していますので、オーバーライドしていなければBaseApplicationの以下のコードが該当します。

php

1 public function console($commands) 2 { 3 return $commands->addMany($commands->autoDiscover()); 4 }

cakephp/BaseApplication.php#L206 at 3.7.9 · cakephp/cakephp

ここで、$commandsは、Cake\Console\CommandCollection のインスタンスですので、CommandCollection::autoDiscover を見てみます。

php

1 public function autoDiscover() 2 { 3 $scanner = new CommandScanner(); 4 5 $core = $this->resolveNames($scanner->scanCore()); 6 $app = $this->resolveNames($scanner->scanApp()); 7 8 return array_merge($core, $app); 9 }

cakephp/CommandCollection.php#L218 at 3.7.9 · cakephp/cakephp

Cake\Console\CommandScannerがコマンドの探査を行っていることが判ります。

CommandScanner::scanCore メソッドは以下のようになっています。

php

1 public function scanCore() 2 { 3 $coreShells = $this->scanDir( 4 dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Shell' . DIRECTORY_SEPARATOR, 5 'Cake\Shell\', 6 '', 7 ['command_list'] 8 ); 9 $coreCommands = $this->scanDir( 10 dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Command' . DIRECTORY_SEPARATOR, 11 'Cake\Command\', 12 '', 13 ['command_list'] 14 ); 15 16 return array_merge($coreShells, $coreCommands); 17 }

cakephp/CommandScanner.php#L36 at 3.7.9 · cakephp/cakephp

というわけで、ディレクトリをスキャンしてコマンドをリストアップしているのは、CommandScanner::scanDir と言うことが判ります。

cakephp/CommandScanner.php#L109 at 3.7.9 · cakephp/cakephp

あとは、CommandScanner::scanDir にデバッグを仕込んで引数の内容、ステップごとの結果を正常な環境と比較すれば、解決の糸口が見つかるかもしれません。

投稿2019/10/23 05:05

nojimage

総合スコア959

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

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

yme2zk

2019/10/23 11:19

詳細にありがとうございます。 正常に動く環境と照らし合わせつつ確認してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問