2021年 7月 の投稿一覧

phpbrew からインストールしたPHPでartisan migrae できない

プロジェクトごとにPHPのバージョン管理をするため、先日、phpbrewを導入しました。

しばらくは問題なく使えていたのですが、Laravelの開発のためartisanコマンドを実行したときにエラーが。

$ php artisan migrate

   Illuminate\Database\QueryException  : could not find driver (SQL: select * from information_schema.tables where table_schema = laravel_chap5 and table_name = migrations and table_type = 'BASE TABLE')

  at /var/www/public/laravel_app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669
    665|         // If an exception occurs when attempting to run a query, we'll format the error
    666|         // message to include the bindings with SQL, which will make this exception a
    667|         // lot more helpful to the developer instead of just the database's errors.
    668|         catch (Exception $e) {
  > 669|             throw new QueryException(
    670|                 $query, $this->prepareBindings($bindings), $e
    671|             );
    672|         }
    673|

  Exception trace:

  1   PDOException::("could not find driver")
      /var/www/public/laravel_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=localhost;port=3306;dbname=laravel_app", "laravel_user", "laravel_passwd", [])
      /var/www/public/laravel_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

PDOExeption::(“coult not find driver”) となってます。PDOドライバーがない??

phpのインストール状況を見てみました。

$ php -i | grep PDO
PDO
PDO support => enabled
PDO drivers =>

むむ…。確かに設定されていない…

defaultバリアントにもpdoは含まれているんですけどね…念のためインストールしなおし。

$ phpbrew install 7.4.21 +default +pdo +mysql
===> phpbrew will now build 7.4.21
===> Loading and resolving variants...
Checking distribution checksum...
Checksum matched: 36ec6102e757e2c2b7742057a700bbff77c76fa0ccbe9c860398c3d24e32822a
===> Distribution file was successfully extracted, skipping...

# 中略 #

* We found that you enabled 'mysql' variant, you might need to setup your
  'pdo_mysql.default_socket' or 'mysqli.default_socket' in your php.ini file.

* To configure your installed PHP further, you can edit the config file at
    /home/uchiida/.phpbrew/php/php-7.4.21/etc/php.ini

To use the newly built PHP, try the line(s) below:

    $ phpbrew use php-7.4.21

Or you can use switch command to switch your default php to php-7.4.21:

    $ phpbrew switch php-7.4.21

Enjoy!

バリアントをつけなおしてみても、状況は変わらず。うーんなんなのか…

メッセージをよく見てみると、「mysqlバリアントを有効にするには、php.iniでソケットをセットアップする必要があるかもよ」と書かれています。

改めてGithubのREADMEを見直してみたところ、phpbrew config でiniを修正することができると書いてあります。

https://github.com/phpbrew/phpbrew/blob/master/README.ja.md#extention-installer

記載の通りにコマンド入力したら、エディタが立ち上がったので、そのまま保存して終了しました。

これで直ったのかな~と思いつつ、PHPの情報を見てみると、、、

$ php -i | grep PDO
PDO
PDO support => enabled
PDO drivers => mysql
PDO Driver for MySQL => enabled

直ってました。artisan migrate コマンドも実行できました。

iniファイルの変更は、別途行わないといけないみたいですね…

以上です。あなたのお役に立てればうれしいです。

何度も調べちゃう英単語: via

なかなか意味が覚えられなくて、そのたび検索している単語がいくつかあります。

そろそろループをbreakしたいので、メモリークリップに書き留めておきます。

Ciscoのルーティングテーブルに登場するvia。

プログラムやサーバーのエラーメッセージなどでも、たまに見かけます。

カタカナ表記だと「ヴァイア」という発音です。

意味は、「~を経由して」とか、「~を通じて」。場所やものを表す名詞を後ろにつなげることが多いです。

Ciscoルータのテーブルでは、ルート情報をどのネイバーから学習したのかを表す部分で用いられてます。

なんとなく英語っぽくない単語だと思ってましたが、ラテン語由来なのですね。

以上です。あなたのお役に立てればうれしいです。

Laravel 6 にlaravel/ui をインストールしたらエラー

Laravel 6で新規プロジェクトを立ち上げて、composerでlaravel/uiをインストールしようとしたらエラーになってしまいました。

$ composer require laravel/ui
Using version ^3.3 for laravel/ui
./composer.json has been updated
Running composer update laravel/ui
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - laravel/ui[v3.3.0, ..., 3.x-dev] require illuminate/console ^8.42 -> found illuminate/console[v8.42.0, ..., 8.x-dev] but these were not loaded, likely because it conflicts with another require.
    - Root composer.json requires laravel/ui ^3.3 -> satisfiable by laravel/ui[v3.3.0, 3.x-dev].


Installation failed, reverting ./composer.json and ./composer.lock to their original content.

バージョン要求を満たしてないみたいです。

Laravel 6 の公式ドキュメントを見たら、laravel/uiのバージョンを指定するように記載がありました。

https://laravel.com/docs/6.x/frontend

The Bootstrap and Vue scaffolding provided by Laravel is located in the laravel/ui Composer package, which may be installed using Composer:
composer require laravel/ui:^1.0 –dev

https://laravel.com/docs/6.x/frontend

指定のコマンドで再チャレンジします。

$ composer require laravel/ui:^1.0 --dev
./composer.json has been updated
Running composer update laravel/ui
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking laravel/ui (v1.3.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
As there is no 'unzip' nor '7z' command installed zip files are being unpacked using the PHP zip extension.
This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.
Installing 'unzip' or '7z' may remediate them.
  - Downloading laravel/ui (v1.3.0)
  - Installing laravel/ui (v1.3.0): Extracting archive
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
67 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

unzipがない、という警告が出てますが、とりあえずインストールはできたみたいです。

bugfixサポートも2021年9月に切れるので、そろそろLaravel6の利用も終えたほうがよさそうですね。

以上です。あなたのお役に立てればうれしいです。

Laravelで存在しないコントローラへのルーティングを書いたらInvalid route action エラーになった

久しぶりにLaravelを触っていて、変なところでつまづいたのでメモしておきます。

発生したのはLaravel 6.20 です。

新しくコントローラを作成しようとして、artisan でmake:controllerを実行したらエラーになりました。

$ php artisan make:controller NewSingleActionController --invokable

   UnexpectedValueException  : Invalid route action: [App\Http\Controllers\NewSingleActionController].

  at /var/www/laravel_app/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php:92
    88|      */
    89|     protected static function makeInvokable($action)
    90|     {
    91|         if (! method_exists($action, '__invoke')) {
  > 92|             throw new UnexpectedValueException("Invalid route action: [{$action}].");
    93|         }
    94|
    95|         return $action.'@__invoke';
    96|     }

  Exception trace:

  1   Illuminate\Routing\RouteAction::makeInvokable("App\Http\Controllers\NewSingleActionController")
      /var/www/laravel_app/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php:47

  2   Illuminate\Routing\RouteAction::parse("new_route", ["App\Http\Controllers\NewSingleActionController", "App\Http\Controllers\NewSingleActionController"])
      /var/www/laravel_app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:162

  Please use the argument -v to see more details.

最初はartisanコマンドを間違えたのかと思ったのですが、Execption traceのところをよく見てみると、Route.phpで例外発生しています。

そういえば、この後コントローラを作るからと、NewSingleActionContoller へのルーティングを書いておいたんだった。

web.phpから、NewSingleActionContllerへのルーティング情報をコメントアウトしたら解消しました。

artisanコマンドって、Routeなどの直接関係してなさそうなソースの例外も拾って動作停止するんですね…知らなかった。

こちらのQiita記事を見て、原因に気づいたのですが…名前空間の制御、意識してないとまた忘れそうです。

https://qiita.com/Okkun555/items/3a8c5df75a3f45d0474c

以上です。あなたのお役に立てればうれしいです。