reponの勉強メモ

主に勉強したことのメモです。

dockerコンテナ上のmariadbのバックアップとリストア

バックアップ

docker-compose を使っていて、docker-compose ps コマンドで確認できるコンテナの名前が db_1 だとすると、起動中のコンテナに対して

$ docker-compose exec db_1 mysqldump -u ユーザー名 -p -P ポート番号 -h ホスト(127.0.0.1) DB名 > DB名.dump_$(date +%Y%m%d%H%M%S).sql

で、日付時間をファイル名としたダンプファイルが生成される。パスワードを要求されるのでデータベースのパスワードを入力すること。

作成したら必ず ls -alh でサイズを見る。小さければ失敗している。エディタで開いて確認。

リストア

まずコンテナにダンプファイルをコピーする。

docker psコマンドで確認できるコンテナの名前がdb_1だとすると、起動中のコンテナに対して

docker cp ダンプファイル名 db_1:/

で、コンテナのルートディレクトリにコピーされる。

次に、コンテナに入ってリストア

$ docker-compose exec db_1 /bin/bash

% mysql -u ユーザー名 -p -D DB名 < ダンプファイル

docker上に作ったlaravelに環境変数を追加する際の手順

  1. .env ファイルに環境変数を、 環境変数名=環境変数 の形で追加

    ex: HOGE=HOGEHOGE::HOGE//HOGE

  2. docker-compose.yml の該当コンテナの environment に、環境変数名=${環境変数名} と追加。別名でも受けられるが混乱するので同一名にする。

    ex: HOGE=${HOGE}

  3. .env ファイルで設定した環境変数は必ず config/*.php で受ける。 config/*.php 以外の場所でのenv()での呼び出しは、設定ファイルがキャッシュされるとすべてNULLを返すため(ドキュメントー設定)

  4. たとえばconfig/hogehoge.php内で hogehoge = env('HOGE', default) と定義した場合には、`config('hogehoge')で呼び出せる。

javascriptの配列で重複を除く

const a = [1, 2, 2, 3, 3, 5, -1, "a"]
const uniq = Array.from(new Set(a));
または、
const uniq = [...new Set(a)];

配列からSetオブジェクトを作成し、再度配列に戻す。

Array.from() メソッドは、配列風オブジェクトや反復可能オブジェクトから配列を作る標準組み込み関数。

スプレッド構文 [... ]は反復可能オブジェクトから配列を作成するので、この場合はArray.from() メソッドと等価。

参考

qiita.com

qiita.com

developer.mozilla.org

2つの配列から重複した要素を抽出する

JavaScriptの配列操作に役立つ13のヒントとトリック - Qiita様より

const numOne = [0, 2, 4, 6, 8, 8];
const numTwo = [1, 2, 3, 4, 5, 6];

const firstValueSet = new Set( numOne ) ;
const duplicatedValues = numTwo.filter( item => firstValueSet.has(item) );

console.log(duplicatedValues); // [2, 4, 6]

gem mysql2 のインストールがコケる

$ sudo gem install mysql2 -- --with-cflags=\"-I/usr/local/opt/openssl/include\" --with-ldflags=\"-L/usr/local/opt/openssl/lib\"

via: `ld: library not found for -lssl` after Mac OS Sierra upgrade · Issue #795 · brianmario/mysql2 · GitHub

なお、エラーは以下。

ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1