1
0
hugo/old/2017-04-11-elixir.md
2024-12-21 21:03:10 +09:00

96 lines
3.3 KiB
Markdown

+++
date = "2017-04-11"
tags = ["elixir"]
title = "ElmとPhoenixで作成するWebアプリ"
slug = "elixir"
+++
Elmというのは、Reactのようなフレームワークで、見通しが良いのが特徴(だと思っています)。昔、Hello World程度に使ったことがありました。Elmは色々と面倒なところはありますが、分かりやすさはあります(一見して)。
PhoenixはErlangを書きやすくしたElixirのWebフレームワークで、リアルタイムのリロード関連の処理がやりやすかった記憶。
これらを組み合わせて何か作ってる人はかなり少ないですが、探してみると幾つかの記事が見つかりました。
それを参考に何か作ろうかなーとか思っていたので紹介。
https://medium.com/@diamondgfx/setting-up-elm-with-phoenix-be3a9f55bac2
https://ubiteku.oinker.me/2016/11/28/elixir-phoenix-and-elm/
https://github.com/cotoami/cotoami
これを見る限りでは`cotoami`というプロジェクトがあって、何やらmd共有とチャットサービスみたいなものが実験的に稼働しているみたいな感じなのかな。
```bash
$ git clone https://github.com/cotoami/cotoami
$ cd cotoami
$ npm i
$ mix deps.get
$ mix ecto.create && mix ecto.migrate
$ mix phoenix.server
```
それぞれのバージョン。
```bash
$ mix -v
Mix 1.5.0-dev
$ mix phoenix.new -v
Phoenix v1.2.1
$ psql -V
psql (PostgreSQL) 9.5.3
$ elm -v
0.18.0
```
macでやるとerlang,elixirのバージョンとかpostgrexなどの設定とかでかなりハマる。
> warning: variable "deps" does not exist and is being expanded to "deps()"
こんな感じでエラーが出る場合、`mix.exs`を編集して変数の語尾に`()`をつけることで回避可能。
> psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket
以下は`pid`などを削除。
> FATAL: lock file "postmaster.pid" already exists
```bash
$ rm /usr/local/var/postgres/postmaster.pid
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ ps aux | grep postgres
```
以下はプロセスのKILLのワンライナー
```
$ ps aux | grep postgres | sed 's/ //g' | cut -d ' ' -f 2|sed '1d' | xargs kill
```
起動など。
```bash
$ initdb /usr/local/var/postgres -E utf8
$ pg_ctl -D /usr/local/var/postgres -l logfile start
$ createuser -P -d postgres
$ psql -l
```
> [error] Failed to connect to Redis
多分、`npm i`でredisはインストールされてれると思うけど一応。
```
$ npm i redis
$ redis-server
$ mix phoenix.server
```
というか、ここまでやってみて、Erlang、かなりつらいです。Rubyといい勝負というか、そんな感じで。また、PhoenixもRailsのような辛さが見え隠れしている印象で、最近、Golangを触っていたせいか、正直、ErlangやRubyなどの言語はGolangと比較してなんとなく辛いというか、そう感じるところがあったりして、しかし、サーバーサイドやデータベースなどを考慮するなら、こちらの選択もありだと思うので、慣れていきたいなと思いつつ、やっぱり慣れの問題なのかもしれませんね。おわり。