備忘録

働きたくないでござる

Elixir チュートリアル (3) Phoenix 導入

過去記事 giraphme.hatenablog.com giraphme.hatenablog.com

今回は Phoenix を使えるところまで進めたいと思います。

Phoenix のインストール

公式の言う通り これで最新版のアーカイブを取得できます。

$ mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez

もちろん、任意のバージョンを探してきて取得することも可能です。
GitHub - phoenixframework/archives: Holds archives for released Phoenix versions

プロジェクトを作成

Mix でプロジェクトを作成します。

$ mix phoenix.new sample
* creating sample/config/config.exs
* creating sample/config/dev.exs
* creating sample/config/prod.exs
* creating sample/config/prod.secret.exs
* creating sample/config/test.exs
* creating sample/lib/sample.ex
...
Fetch and install dependencies? [Yn] Y
* running mix deps.get
* running npm install && node node_modules/brunch/bin/brunch build
We are all set! Run your Phoenix application:

    $ cd sample
    $ mix phoenix.server

You can also run your app inside IEx (Interactive Elixir) as:

    $ iex -S mix phoenix.server

Before moving on, configure your database in config/dev.exs and run:

    $ mix ecto.create

この状態で mix phoenix.server しても自分の環境では

[error] Postgrex.Protocol (#PID<0.3406.0>) failed to connect: ** (Postgrex.Error) FATAL 28000 (invalid_authorization_specification): role "postgres" does not exist

と言われて動かすことができないので、 PostgreSQL の設定をするか MySQL を使えるようにしましょう。

MySQL の設定

私の場合、普段の業務で MySQL を使用しており、環境が整っているので MySQL を使えるように設定しました。

まずは /mix.exsdeps に以下を追記

  defp deps do
    [
      {:phoenix, "~> 1.3.0-rc"},
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_ecto, "~> 3.2"},
      ...
      {:mariaex, "~> 0.1"}, # ここ
      ...
    ]
  end

そして config/dev.exs# Configure your database の箇所を以下のように変更します。

config :sample, Sample.Repo,
  adapter: Ecto.Adapters.MySQL,
  username: "ユーザー名",
  password: "パスワード",
  database: "DB名",
  hostname: "localhost",
  pool_size: 10

その後、以下のコマンドを実行してください。

$ mix deps.get
$ mix phoenix.server

これで http://0.0.0.0:4000 にアクセスすると Web サーバーが起動していることを確認できるはずです。

所感

dev, prod など中途半端に省略されていることが多くて気持ち悪い……。