Elixir 学習用
```bash
$ docker compose up --build
...
Attaching to livebook
livebook | [Livebook] Application running at http://localhost:8080/?token=xxxxx
表示される URL にアクセスする
$ docker compose -f docker-compose.with-db.yml up --build
...
postgres_for_livebook | 2023-10-30 11:47:54.930 UTC [1] LOG: database system is ready to accept connections
...
livebook_with_db | [Livebook] Application running at http://localhost:8080/?token=xxxxx
表示される URL にアクセスする
Charms を使用する場合、以下のコマンドでコンテナを起動する
ただし、 Apple Sillicon 以外には対応していない
$ docker compose -f docker-compose.charms.yml up --build
...
livebook_charms | [Livebook] Application running at http://localhost:8080/?token=xxxxx
表示される URL にアクセスする
コンテナを起動している状態で以下のコマンドを実行する
docker export elixir-learning-livebook-1 -o elixir.tar.gz
実行する Windows マシンの PowerShell で以下のコマンドを実行する
※ WSL2 導入済とする
wsl --import elixir $env:userprofile\AppData\elixir elixir.tar.gz
実行する Windows マシンの PowerShell で以下のコマンドを実行する
wsl -d elixir
以下のコマンドを実行して環境変数を設定する
source /home/livebook/setup_for_wsl.sh
LiveBook を起動する
/app/bin/livebook start
二つ、異なるターミナルを開き、それぞれで起動したプロセスが通信できることを確認する
Docker 上で実行している場合は以下のコマンドで docker コンテナ内に入る
docker exec -it livebook /bin/bash
一方のターミナル (以後、ターミナル foo とする) で以下のコマンドを実行する
iex --sname foo
他方のターミナル (以後、ターミナル bar とする) で以下のコマンドを実行する
iex --sname bar
ターミナル foo で以下のコマンドを実行する
Node.ping(:bar@<ホスト名>)
:pong
が返ってくることを確認する
ターミナル bar で以下のコマンドを実行する
Node.ping(:foo@<ホスト名>)
:pong
が返ってくることを確認する
ターミナル bar で以下のコマンドを実行する
Node.ping(:baz@<ホスト名>)
:pang
が返ってくることを確認する
ターミナル foo で以下のコマンドを実行する
Node.list
[]
が返ってくることを確認する
ターミナル bar で以下のコマンドを実行する
Node.list
[]
が返ってくることを確認する
ターミナル foo で以下のコマンドを実行する
Node.connect(:bar@<ホスト名>)
true
が返ってくることを確認する
ターミナル foo で以下のコマンドを実行する
Node.list
[:bar@<ホスト名>]
が返ってくることを確認する
ターミナル bar で以下のコマンドを実行する
Node.list
[:foo@<ホスト名>]
が返ってくることを確認する
ターミナル bar で以下のコマンドを実行する
pid = self()
:global.register_name( :reciever, pid )
receive do message -> IO.puts( "received: #{ message }" ) end
ターミナル foo で以下のコマンドを実行する
to_pid = :global.whereis_name( :reciever )
send( to_pid, "send from foo" )
ターミナル bar で received: send from foo
と表示されることを確認する
ターミナル foo で以下のコマンドを実行する
send( to_pid, "second message" )
ターミナル bar で以下のコマンドを実行する
receive do message -> IO.puts( "received: #{ message }" ) end
ターミナル bar で received: second message
と表示されることを確認する
サンプル用のリポジトリーをクローンする
cd \
&& git clone https://github.com/RyoWakabayashi/phoenix-liveview-example.git \
&& cd phoenix-liveview-example
mix setup
コンテナ外部からアクセスできるように設定ファイルを編集する
sed -i -e 's/127, 0, 0, 1/0, 0, 0, 0/g' config/dev.exs
mix phx.server
表示される URL にアクセスする
以下のコマンドで新規プロジェクトを作成する
※今回は DB を使わないので --no-ecto
を付けている
mix phx.new hello_world --no-ecto
プロジェクトが hello_world
ディレクトリーに作成される
hello_world
ディレクトリーに移動して Phoenix を起動する
cd hello_world
sed -i -e 's/127, 0, 0, 1/0, 0, 0, 0/g' config/dev.exs
mix phx.server