- 投稿日:2021-03-01T15:22:35+09:00
Laravel の tinkerで日本語入力ができず色々迷走していたらもっと根本的な問題だった件
最初に
以下、当初参考にさせて頂いた記事です。
Laravel の tinker で日本語が入力できなくて困ったけどなんとかなった話私の場合、先輩より助言を頂き以下の記事を参考に実施してみた。
Laravel の tinker で日本語が入力出来ない早速進めてみる
記事を見るに、libeditのversionが古い為最新のlibeditを自身で取得、
シンボリックリンクを差し替えるという方法のよう。*前提:以下の手順はPHPのDocker Container内で行っている。
①今のlibedit がどうなっているか確認root@6d5cb7f51e5f:/# apt-cache show libedit-dev Package: libedit-dev Source: libedit Version: 3.1-20181209-1 Installed-Size: 486 Maintainer: LLVM Packaging Team <pkg-llvm-team@lists.alioth.debian.org> Architecture: amd64 Depends: libedit2 (= 3.1-20181209-1), libbsd-dev (>= 0.1.3), libncurses-dev | libtinfo-dev Description: BSD editline and history libraries (development files) Description-md5: d563680e6c8f51c40aea576bffaea165 Multi-Arch: same Homepage: https://www.thrysoee.dk/editline/ Tag: devel::library, implemented-in::c, interface::text-mode, role::devel-lib, role::program, suite::bsd, uitoolkit::ncurses, use::editing Section: libdevel Priority: optional Filename: pool/main/libe/libedit/libedit-dev_3.1-20181209-1_amd64.deb Size: 114472 MD5sum: 41ada765583355c35c9fc7dd23267d39 SHA256: 2eb60366c863b0eef054b6bc688dec1fcb526a132a680d3673f75205787a0ddf②phpのパスを確認
root@6d5cb7f51e5f:/# which php /usr/local/bin/php続いて以下コマンドを実行し、どこにリンクが貼られているか確認
root@6d5cb7f51e5f:/# ldd /usr/local/bin/php | grep libedit libedit.so.2 => /usr/lib/x86_64-linux-gnu/libedit.so.2 (0x00007fe439006000)③libedit の最新版をinstallする
# cd /usr/local/src/ # wget https://www.thrysoee.dk/editline/libedit-20191211-3.1.tar.gz # tar zxvf libedit-20191211-3.1.tar.gz # cd libedit-20191211-3.1/ # ./configure ... configure: error: libncurses, libcurses, or libtermcap is required! 上記のようにinstallするように言われるので、以下コマンドでinstallしておく。 # apt-get install -y libncursesw5-dev 続けて以下コマンドを実行する。 # ./configure # make # make install④シンボリックリンクの差し替え
root@6d5cb7f51e5f:/usr/lib/x86_64-linux-gnu# ls -la | grep libedit lrwxrwxrwx 1 root root 17 Dec 12 2018 libedit.so.2 -> libedit.so.2.0.59 -rw-r--r-- 1 root root 204344 Dec 12 2018 libedit.so.2.0.59 #既に存在しているシンボリックリンクをunlinkする root@6d5cb7f51e5f:/usr/lib/x86_64-linux-gnu# unlink libedit.so.2 root@6d5cb7f51e5f:/usr/lib/x86_64-linux-gnu# ls -la | grep libedit -rw-r--r-- 1 root root 204344 Dec 12 2018 libedit.so.2.0.59 #リンクの差し替え root@6d5cb7f51e5f:/usr/lib/x86_64-linux-gnu# ln -s /usr/local/lib/libedit.so.0 libedit.so.2 root@6d5cb7f51e5f:/usr/lib/x86_64-linux-gnu# ls -la | grep libedit lrwxrwxrwx 1 root root 27 Feb 22 22:12 libedit.so.2 -> /usr/local/lib/libedit.so.0 -rw-r--r-- 1 root root 204344 Dec 12 2018 libedit.so.2.0.59⑤パス:/usr/local/libを確認
root@548a9ad5b2fa:/usr/local/lib# ls -la total 2484 drwxr-xr-x 1 root root 4096 Feb 23 22:08 . drwxr-xr-x 1 root root 4096 Jan 12 02:27 .. -rw-r--r-- 1 root root 1646062 Feb 23 22:08 libedit.a -rwxr-xr-x 1 root root 928 Feb 23 22:08 libedit.la lrwxrwxrwx 1 root root 17 Feb 23 22:08 libedit.so -> libedit.so.0.0.62 lrwxrwxrwx 1 root root 17 Feb 23 22:08 libedit.so.0 -> libedit.so.0.0.62 -rwxr-xr-x 1 root root 863760 Feb 23 22:08 libedit.so.0.0.62 drwxr-xr-x 1 root root 4096 Jan 12 02:28 php drwxr-xr-x 2 root root 4096 Feb 23 22:08 pkgconfig drwxrwsr-x 4 root staff 4096 Jan 25 13:32 python2.7 drwxrwsr-x 3 root staff 4096 Jan 25 13:31 python3.7ここまでで現状確認の為、tinkerで日本語入力を試みる。
しかし!! 解決しなかったのです。先輩からの一言
「PHPのコンテナ内では日本語入力できますか?」問題の切り分けができていな自分の未熟さを痛感しました。
そもそもコンテナ内で日本語が使えなかったのです。PHPのDockerfileに以下を追加。
DockerfileRUN apt-get update && \ apt-get install -y locales && \ echo "ja_JP UTF-8" > /etc/locale.gen && \ locale-gen && \ echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc終局
tinkerで日本語を入力してみる。
*PHPコンテナ内での日本語入力は解決。>>> App\Models\Company::where('name', "ホゲホゲ会社 大阪支店")->get(); => Illuminate\Database\Eloquent\Collection {#4193 App\Models\Company {#3253 id: 2, name: "ホゲホゲ会社 大阪支店", email: "hoge@sample.com", phone_number: "", postal_code: "", address: "", } }やっと解決!!
一から環境構築するにはまだまだ知識不足だということを痛感した反面、
便利ツールに頼らないことでいい経験ができました。
先輩に感謝。
- 投稿日:2021-03-01T13:49:32+09:00
composer self-update のエラー
php artisan make:authが使えなくなって久しいです。
代わりとなるcomposer require laravel/uiを入力すると、次のようなエラーが出ました。Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2要はcomposerをver2にアップデートしてくださいということです。
composer self-update --2と打ったところ、またエラーが出ました。[Composer\Downloader\FilesystemException] Filesystem exception: Composer update failed: "C:\ProgramData\ComposerSetup\bin\composer.phar" could not be written. rename(C:\ProgramData\ComposerSetup\bin/composer-temp.phar,C:\ProgramData\ComposerSetup\bin\composer.phar): ANZX ܂B (code: 5)リネームしろと言われていますが、その部分は無視してもできました。
今回注目したのは "C:\ProgramData\ComposerSetup\bin\composer.phar" could not be written. の部分です。
書き込みができませんでしたということなので、書き込みができるようにします。プロパティのアクセスを変更
ローカルの C:\ProgramData\ComposerSetup\bin\composer.phar にアクセスし、右クリックします。
プロパティを選択すると、「セキュリティ」というタブが出てきます。
そのタブの下部にある「詳細設定」をクリックしてください。
詳細設定を押すと、プリンシパルごとにアクセス許可が表示されます。
そのほとんどのアクセス権限がフルコントロールだったのですが、ひとつ違うものになっている箇所があったので編集してフルコントロールにします。OK、OKでプロパティを閉じたらPowerShellに戻って
composer self-update --2できました。
- 投稿日:2021-03-01T13:49:32+09:00
composer update のエラー
php artisan make:authが使えなくなって久しいです。
代わりとなるcomposer require laravel/uiを入力すると、次のようなエラーが出ました。Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2要はcomposerをver2にアップデートしてくださいということです。
composer self-update --2と打ったところ、またエラーが出ました。[Composer\Downloader\FilesystemException] Filesystem exception: Composer update failed: "C:\ProgramData\ComposerSetup\bin\composer.phar" could not be written. rename(C:\ProgramData\ComposerSetup\bin/composer-temp.phar,C:\ProgramData\ComposerSetup\bin\composer.phar): ANZX ܂B (code: 5)リネームしろと言われていますが、その部分は無視してもできました。
今回注目したのは "C:\ProgramData\ComposerSetup\bin\composer.phar" could not be written. の部分です。
書き込みができませんでしたということなので、書き込みができるようにします。プロパティのアクセスを変更
ローカルの C:\ProgramData\ComposerSetup\bin\composer.phar にアクセスし、右クリックします。
プロパティを選択すると、「セキュリティ」というタブが出てきます。
そのタブの下部にある「詳細設定」をクリックしてください。
詳細設定を押すと、プリンシパルごとにアクセス許可が表示されます。
そのほとんどのアクセス権限がフルコントロールだったのですが、ひとつ違うものになっている箇所があったので編集してフルコントロールにします。OK、OKでプロパティを閉じたらPowerShellに戻って
composer self-update --2できました。
- 投稿日:2021-03-01T12:57:59+09:00
Laravelのmigration classでchangeメソッドが使用できない
現象
ある既存のカラムでNULL値を許可orDEFAULT値を設定するようにしたく、
migrationを実行したところ以下のエラーに遭遇。RuntimeException:Changing columns for table "テーブル名" requires Doctrine DBAL. Please install the doctrine/dbal package.対処法
素直にdoctrine/dbal packageをcomposerでinstallする。
composer require doctrine/dbal Using version ^3.0 for doctrine/dbal ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 4 installs, 0 updates, 0 removals - Installing composer/package-versions-deprecated (1.11.99.1): Downloading (100%) - Installing doctrine/event-manager (1.1.1): Downloading (100%) - Installing doctrine/cache (1.10.2): Downloading (100%) - Installing doctrine/dbal (3.0.0): Downloading (100%) ...よし、これでOK。
再度migrationを実行してみます。Migrating : 2021_03_01_001211_modify_employees_table_20210301 Symfony\Component\Debug\Exception\FatalThrowableError : Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not foundDriverがないだと。。。
こういう時こそ落ち着いて、エラー文で示してくれているディレクトリの中を覗くと原因が判明する。
vendor/doctrine/dbal/src/Driver/
↑
こちらのパスにPDOMySqlが存在しなかった。他にも同様の現象に出くわしている方がいると期待し検索
[laravel] doctrine/dbalを入れたのに「Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found」と言われる
こちらの方が仰られている通り、
ver3.x系(先程installしたversion)とver2.x系とではディレクトリ構成が変わっていました。
気を取り直し、バージョンを指定しinstallし直す。composer require "doctrine/dbal:2.*" ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 0 installs, 1 update, 0 removals - Downgrading doctrine/dbal (3.0.0 => 2.12.1): Downloading (100%) ...最後に以下を実行し無事解決に至る。(多謝)
php artisan migrate:refresh --seed該当のmigrationファイル<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class ModifyEmployeesTable20210301 extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('employees', function (Blueprint $table) { $table->string('first_name')->nullable()->change(); $table->string('last_name')->nullable()->change(); $table->tinyInteger('email_verified')->default(0)->after('email_verified_at'); $table->string('email_verify_token')->nullable()->after('email_verified'); $table->tinyInteger('status')->default(0)->after('email_verify_token'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('employees', function (Blueprint $table) { $table->string('first_name')->nullable(false)->change(); $table->string('last_name')->nullable(false)->change(); $table->dropColumn('email_verified'); $table->dropColumn('email_verify_token'); $table->dropColumn('status'); }); } }まだまだ未熟者ですが、
経験を蓄積していく為に記事にして残すことを決意した次第です。
今後とも先輩方、宜しくお願い致します。