はじめに
前回、Ubuntu16.04にphoenixまで入れてみたので、サンプル用の最初のアプリを作ってみます。
最初のアプリ
テンプレート作成
mix phoenix.new
コマンドを使って、phoenixのテンプレートアプリを作成します。
下の例ですと、ディレクトリdemo_app
が作成されて、その下にプロジェクトに必要なファイルが配置されます。
$ mix phoenix.new demo_app
これでテンプレートと依存するライブラリのダウンロード等が行われます。なお、Linuxですと以下の警告ができますが、これは無視してかまいません(Mac専用でしょうか?)。
npm WARN optional Skipping failed optional dependency /brunch/chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.11
DB作成
mix ecto.create
でRDBをセットアップしていきます。
$ cd demo_app
$ mix ecto.create
Hexのバージョン違いなどによって、Unchecked dependencies for environment dev:
というエラーメッセージと共にmix deps.get
を実行して欲しいというエラーが出ることがあります。このときは、素直にdeps.getを実行します。
$ mix deps.get
もう一度、mix ecto.create
でRDBをセットアップしていきます。
rebar
がインストールされていない場合は、rebar入れてもいいかと聞かれるので、問題無い(Y)と答えておきます。
$ mix ecto.create
(...略...)
Could not find "rebar", which is needed to build dependency :fs
I can install a local copy which is just used by Mix
Shall I install rebar? [Yn]
-> Y
しかし、Postgresqlインストールしたデフォルトのままだと、postgresユーザにパスワードが設定されていないので、下のようなエラーが出てしまいます。
** (Mix) The database for DemomoApp.Repo couldn't be created, reason given: psql: FATAL: password authentication failed for user "postgres"
FATAL: password authentication failed for user "postgres"
設定ファイル(config/dev.exs
)にpostgresのユーザ、パスワード、ホスト名などが設定されています。
$ cat/config/dev.exs
(...略...)
# Configure your database
config :demo_app, DemoApp.Repo,
adapter: Ecto.Adapters.Postgres,
username: "postgres",
password: "postgres",
database: "demo_app_dev",
hostname: "localhost",
pool_size: 10
今回は、設定の方を変えずに、dbのpostgresユーザにパスワードを設定することにします。
postgresqlのpg_hba.conf
ファイルの位置を確認しつつ、パスワードを設定します。
$ sudo su - postgres
> psql
postgres=# show hba_files;
hba_file
--------------------------------------
/etc/postgresql/9.5/main/pg_hba.conf
(1 row)
postgres=# alter role postgres with password 'postgres';
pg_hba.confの中身は、下のようになっていました。
つまり、ローカルへの接続はパスワード認証が許可されているということで、こちらは編集の必要は無さそうです。
(...略...)
local all all 127.0.0.1/32 md5
(...略...)
再度、mix ecto.create
でRDBをセットアップします。
$ mix ecto.create
The database for DemoApp.Repo has been created.
今度は無事作成できたようです。
$ psql -h localhost --username=postgres -W
postgres=# \l
(...略...)
Name | Owner | Encoding | Collate | Ctype | Access privileges
----------------+----------+----------+-------------+-------------+-----------------------
demo_app_dev | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
起動とWeb確認
mix phoenix.server
で、サーバを起動してみます。設定ファイルを見るとポートは4000です。
$ cat/config/dev.exs
(...略...)
config :demo_app, DemoApp.Repo,
http: [port: 4000],
(...略...)
$ mix phoenix.server
http://localhost:4000/
にアクセスすると、Phoenix Frameworkのデフォルト画面が表示されました。
なお、iexでインタラクティブで操作しながらサーバを動かす場合は、下のようにします。
$ iex -S mix phoenix.server