kidoOooOoooOOom

IT系で開発やってます

Phoenixでcrud操作できるところまで

昨日に引き続き、elixir と Phoenixを軽く触ってみる。

Phoenix は default で postgreSQL を使うので、それをローカルのmacに環境構築する。
参考にしたのはこちら。qiita.com

$ brew install postgresql
$ initdb /usr/local/var/postgres -E utf8
$ postgres -D /usr/local/var/postgres

これでデータベース一覧が取得できれば成功
$ psql -l

だが、自分のmacではエラーになった。どうやらバンドルインストールされたのがあるらしく下記対応で起動できるよういなった。

$ curl -o fixBrewLionPostgresql.sh http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh
$ chmod 777 fixBrewLionPostgresql.sh
$ ./fixBrewLionPostgresql.sh

これでおk。

.zshrc
あたりに下記の設定をしておけば

$ export PGDATA=/usr/local/var/postgres

今後は下記のコマンドで起動停止できる。
$ pg_ctl -l /usr/local/var/postgres/server.log start
$ pg_ctl -l /usr/local/var/postgres/server.log stop


今回のphoenix アプリ向けに postgresにユーザ作成
$ createuser -P -d postgres

default では password も postgresになっている。
phoenixのtestで使うDB の設定は config/test.exs に書かれている。

# Configure your database
config :phoenix_training, PhoenixTraining.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "postgres",
  password: "postgres",
  database: "phoenix_training_test",
  hostname: "localhost",
  pool: Ecto.Adapters.SQL.Sandbox

以下のコマンドでデータベースが作成される。
$ mix ecto.create

データベースを確認する。
$ psql -l

phoenix_traning_devが作成されていることが確認できる。

                                       List of databases
        Name         |  Owner   | Encoding |   Collate   |    Ctype
---------------------+----------+----------+-------------+-------------
 phoenix_traning_dev | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8


下記のようなコマンドを実行すると、User CRUDの各ファイルが作成される。
$ mix phoenix.gen.html User users name:string email:string bio:string number_of_pets:integer

ファイル生成後、

Add the resource to your browser scope in web/router.ex:
    resources "/users", UserController

とあるので、router.exに定義を追加する。

その後、

Remember to update your repository by running migrations:
    $ mix ecto.migrate

とあるので、migrateを実行する。

サーバを起動して、localhost:4000/users でアクセスすると User の CRUD アプリが動く。
f:id:gidooom:20151007160618p:plain


user crud のために自動生成されたソースは下記の通り。
https://github.com/kidooom/phoenix_training/commit/336236aee52c95b2daf18ee9d80c589d862df876