Elixir + Phonenix でWebアプリ作る時の基本まとめ:データベースの準備とWebアプリの起動
環境構築はこちらを。今回はこの続き。
Elixir + Phonenix でWebアプリ作る時の基本まとめ:環境構
PostgreSQLデータベースの認証方式を設定
PhoenixはデフォルトのデータベースとしてPostgreSQLを使う。まずはこいつをパスワード認証でログインできるようにしよう。
# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
前回の環境構築でPostgreSQLをインストールし、既に起動しているものとすると、 /etc/postgresql/10/main/pg_hba.conf
の中身は上記のようになっているものと思う。
この時点では postgres
ユーザーのpeer認証しか成功しない。しかしながらpostgreユーザーのOSパスワードも設定されていないので、まずはそれを設定してログインできるようにしなければならない。
$ sudo passwd postgres
新しい UNIX パスワードを入力してください:(新しいパスワードを入力)
新しい UNIX パスワードを再入力してください: (新しいパスワードを入力)
passwd: パスワードは正しく更新されました
無事パスワードを更新できたら、postgres
ユーザーになる。
$ su postgres
ログインできたら、postgresqlに接続。
$ psql -U postgres template1
psql (10.17 (Ubuntu 10.17-0ubuntu0.18.04.1))
Type "help" for help.
template1=#
PostgreSQLに接続できたら、postgresユーザーのパスワードを設定する。
ここではパスワード kuroneko123
を設定するものとしよう。
alter user postgres with encrypted password 'kuroneko123';
設定したら \q
と入力してデータベースとの接続を終了し、さらに exit
してpostgresユーザーから自分の元のユーザーに戻る。
そして設定したパスワードで接続を試みる。
$ psql -U postgres -h localhost template1
Password for user postgres:
パスワードの入力を求められるので、先程設定した kuroneko123
と入力すればログインできる。
はじめてのWebアプリを作成する
アプリの新規作成。ここではアプリ名をkuroneko
とする。
$ mix phx.new kuroneko
途中で依存関係にあるライブラリをインストールするか質問してくるのでY
と答える。
作成されたアプリのディレクトリへ移動
$ cd kuroneko
好きなエディタでconfig/dev.exs
の中のデータベースへの接続パラメータを編集する。
use Mix.Config
# Configure your database
config :kuroneko, Kuroneko.Repo,
username: "postgres",
password: "kuroneko123",
database: "kuroneko_dev",
hostname: "localhost",
show_sensitive_data_on_connection_error: true,
pool_size: 10
パスワードを先程設定したパスワードに書き換える。
なお、データベースはこの後の工程で作られるので、この時点でデータベースが存在する必要はない。
続いてデータベースのセットアップを行う。
$ mix ecto.create
これで準備完了。
Webアプリを起動する。
アプリの起動
$ mix phx.server
エラーが出て無ければ既にアプリは起動している。ブラウザでいかにアクセス。
こんな感じの画面が表示されていれば成功。
アプリのディレクトリ構造
アプリのルート直下はこんな感じになっている。
ls
README.md _build assets config deps lib mix.exs mix.lock priv test
このうち、depsなんかは依存関係にあるライブラリがあってデカイので、ここでは無視して、config
, lib
, priv
, test
を見てみる。
tree config lib priv test
config
├── config.exs
├── dev.exs
├── prod.exs
├── prod.secret.exs
└── test.exs
lib
├── kuroneko
│ ├── application.ex
│ └── repo.ex
├── kuroneko.ex
├── kuroneko_web
│ ├── channels
│ │ └── user_socket.ex
│ ├── controllers
│ │ └── page_controller.ex
│ ├── endpoint.ex
│ ├── gettext.ex
│ ├── router.ex
│ ├── telemetry.ex
│ ├── templates
│ │ ├── layout
│ │ │ └── app.html.eex
│ │ └── page
│ │ └── index.html.eex
│ └── views
│ ├── error_helpers.ex
│ ├── error_view.ex
│ ├── layout_view.ex
│ └── page_view.ex
└── kuroneko_web.ex
priv
├── gettext
│ ├── en
│ │ └── LC_MESSAGES
│ │ └── errors.po
│ └── errors.pot
├── repo
│ ├── migrations
│ └── seeds.exs
└── static
├── css
│ └── app.css
├── favicon.ico
├── images
│ └── phoenix.png
├── js
│ └── app.js
└── robots.txt
test
├── kuroneko_web
│ ├── channels
│ ├── controllers
│ │ └── page_controller_test.exs
│ └── views
│ ├── error_view_test.exs
│ ├── layout_view_test.exs
│ └── page_view_test.exs
├── support
│ ├── channel_case.ex
│ ├── conn_case.ex
│ └── data_case.ex
└── test_helper.exs
今回はここまで。お疲れ様でした。
Discussion