VagrantのCentOSの日時を変更する

プログラムの動作検証を行うため、Vagrantで使用しているcentOS7の日時を変更したい。

日時を変更するには

日時を変更するには、dateコマンドにsオプションを指定する。

日付を変更する 

date -s "2021-04-01"

時刻を変更する

date -s "10:01:02"

日時を変更する

date -s "2021-04-01 10:01:02"

日時の変更が反映されない問題

dateコマンドを実行すると日時が変更されるが、すぐに変更前の日時に戻ってしまう。

調べたところ、VirtualBoxのGuest AdditionsがゲストOSの日時をホストOSと同期しているそうだ。

日時の動機を止めてから、日時を変更すると、変更が反映された。

日時の同期を止める

service vboxadd-service stop

日時を変更する

date -s "2021-04-01 10:01:02"

動作検証が終わったら、同期を再開する。

service vboxadd-service start

LaravelでEloquentを使ってデータを更新しようとしたら”Column ‘updated_at’ in field list is ambiguous”

Laravel5.5でEloquentを使ってデータベースを更新しようとしたら”Column ‘updated_at’ in field list is ambiguous”エラーが発生した。

User::query()
    ->join('contacts', 'users.id', '=', 'contacts.user_id')
    ->update([...]);

Integrity constraint violation: 1052 Column ‘updated_at’ in field list is ambiguous

usersテーブルとcontactsテーブルの両方にupdated_atフィールドが存在するため、
どちらのテーブルのupdated_atフィールドを更新していいかわからず、エラーになっている。

対策としては、\Illuminate\Database\Eloquent\Builderのupdate()ではなく、
\Illuminate\Database\Query\Builderのupdate()を使用すれば良い。

具体的には、\Illuminate\Database\Eloquent\BuilderのgetQuery()で
\Illuminate\Database\Query\Builderを取得してからupdate()を実行する。

注意点としては、\Illuminate\Database\Query\Builderのupdate()を使用すると、
updated_atフィールドが更新されないので、明示的に更新する必要がある。

User::query()
    ->join('contacts', 'users.id', '=', 'contacts.user_id')
    ->getQuery()
    ->update([..., 'users.updated_at' => Carbon::now()]);

macOSのGoogle ChromeでNET::ERR_CERT_INVALIDが出たときの対処法

macOSのGoogle ChromeでNET::ERR_CERT_INVALIDが出たときの対処法。

自己証明書を使用した開発サーバーにmacOSのGoogle Chromeでアクセスすると、”NET::ERR_CERT_INVALID”エラーが表示された。

エラーを無視してページを表示するには、エラーページ上で以下のコマンドを入力する。

thisisunsafe

入力中は画面に何も表示されないが、入力が終わるとページが表示される。

参考

macOSにインストールしたMySQLWorkbench 8.0.23が起動しないときの対処法

macOSにインストールしたMySQLWorkbench 8.0.23が起動しない。

コマンドラインで実行すると以下のエラーメッセージが出力されていた。

❯ /Applications/MySQLWorkbench.app/Contents/MacOS/MySQLWorkbench
Fatal Python error: initfsencoding: unable to load the file system codec, sys.path = ['/Applications/MySQLWorkbench.app/Contents/Resources/libraries', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload']
ModuleNotFoundError: No module named 'encodings'

Current thread 0x0000000107ee8dc0 (most recent call first):
Abort trap: 6

エラーメッセージを見ると、Python3.7が見つからないようだ。

対処法は以下の通り。

(1)Python3.7をインストールする。

brew install python@3.7

(2)シンボリックリンクを作成する。

sudo ln -s /usr/local/Cellar/python@3.7/3.7.10_2/Frameworks/Python.framework /Library/Frameworks/Python.framework

以上で、MySQLWorkbenchが起動するようになった。

参考
* MySQL Bugs: #102364: MySQL Workbench 8.0.23 unable to start due to wrong system python paths
* python – How to add a path to the system path in MySQL Workbench for Mac (Big Sur) – Stack Overflow