参加したもくもく会
以前から合同で勉強会をさせて頂いていたり、様々なことを教えて頂いているfukuoka.exさんのリモート勉強会に再び参加させて頂きました
名古屋には多くの勉強会があるとは言える状況ではないですが、リモートで接続可能な勉強会があるというのはありがたいことです
また今回のもくもく会で以前よりtwitterでよしなにして頂いているElixirの先駆者piacereさんに初対面致しました
いつも「いいね、RT」頂きまして本当に有難うございます!!
今回も経験者トラックで参加しておりますが、選んだテーマはPhoenix入門
PhoenixでjsonAPIを作成したことはあるんですが、ページビュー含めて開発したいなと思ってこのテーマを選定
謎のエラーがでる & ほとんど清流elixirのメンバーと雑談しつつ、もくもくしていた(?)のであまり進めることは出来なかった
何とかphoenixのwelcome画面まで進めることが出来た
Phoenix大入門
いまさらながらPhoenixでプロジェクトを始めるまでの手順をまとめてみる
元々、elixirは自分の環境にインストール済みだったのでphoenixをインストールする(あれ、インストールしてたはずなんやが...)
$ mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
無事にインストールが完了したっぽい
$ mix phx.new -v Phoenix v1.3.4
さっそくプロジェクトを作成してみる
今回は以下の記事をもとにミニマムブログを作成してみる
プロジェクトの名前はmin_blogとした
コマンドを実行する
$ mix phx.new min_blog
お、色々と生成されて無事にプロジェクトが始められたっぽい
* creating test/config/config.exs * creating test/config/dev.exs * creating test/config/prod.exs * creating test/config/prod.secret.exs * creating test/config/test.exs * creating test/lib/test/application.ex * creating test/lib/test.ex : : * creating test/assets/static/robots.txt * creating test/assets/static/images/phoenix.png * creating test/assets/static/favicon.ico
依存関係をインストールするかと聞かれているので「Y」と入力してお願いする
Yを選択すると
mix deps.get : mix deps.compile
のコマンドが走り、必要な外部ライブラリをDLしてくれる
DLが終了して「さぁPhoenixサーバーを立ち上げてくれよな」という文言が現れる
$ cd min_blog Then configure your database in config/dev.exs and run: $ mix ecto.create Start your Phoenix app with: $ mix phx.server You can also run your app inside IEx (Interactive Elixir) as: $ iex -S mix phx.server
言われる通りにコマンドを実行していく
$ cd min_blog $ mix ecto.create
おや... 謎のerrorが...
** (Postgrex.Error) FATAL 28000 (invalid_authorization_specification): role "postgres" does not exist (db_connection) lib/db_connection/connection.ex:163: DBConnection.Connection.connect/2 (connection) lib/connection.ex:622: Connection.enter_connect/5 (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3 Last message: nil State: Postgrex.Protocol ** (Mix) The database for MinimumBlog.Repo couldn't be created: FATAL 28000 (invalid_authorization_specification): role "postgres" does not exist
なんか怒られた
postgresqlはインストール済みであることを確認
$ psql --version psql (PostgreSQL) 11.2
どうやら「postgres」というroleが生成されていないようなので急いで作成する
$ createuser -d postgres
再度、dbをcreateするためにコマンドを実行する
またエラーかい〜〜
$ mix ecto.create warning: found quoted keyword "min_blog" but the quotes are not required. Note that keywords are always atoms, even when quoted. Similar to atoms, keywords made exclusively of Unicode letters, numbers, underscore, and @ do not require quotes mix.exs:57 The database for MinimumBlog.Repo has been created ➜ minimum_blog mix phx.server warning: found quoted keyword "min_blog" but the quotes are not required. Note that keywords are always atoms, even when quoted. Similar to atoms, keywords made exclusively of Unicode letters, numbers, underscore, and @ do not require quotes mix.exs:57 warning: please add the following dependency to your mix.exs: {:plug_cowboy, "~> 1.0"} : : [info] Application minimum_blog exited: MinimumBlog.Application.start(:normal, []) returned an error: shutdown: failed to start child: MinimumBlogWeb.Endpoint ** (EXIT) shutdown: failed to start child: Phoenix.Endpoint.Handler ** (EXIT) "plug_cowboy dependency missing" ** (Mix) Could not start application minimum_blog: MinimumBlog.Application.start(:normal, []) returned an error: shutdown: failed to start child: MinimumBlogWeb.Endpoint ** (EXIT) shutdown: failed to start child: Phoenix.Endpoint.Handler ** (EXIT) "plug_cowboy dependency missing"
あーこれは分かりやすいエラー。外部ライブラリが不足している様だ
./mix_blog/mix.exs/に以下を追加して再び外部ライブラリをDLする
defp deps do [ : : {:cowboy, "~> 1.0"}, {:plug_cowboy, "~> 1.0"} ] end
$ mix deps.get
3度目の正直。ecto.createを実行する
$ mix ecto.create Generated min_blog app The database for min_blog.Repo has been created
やったぜ。phoenixサーバーを立ち上げる
$ mix phx.server [info] Running TestWeb.Endpoint with cowboy 2.6.3 at 0.0.0.0:4000 (http) [info] Access TestWeb.Endpoint at http://localhost:4000
ようやくwelcome画面とご対面
ここまで長かった
docker-composeを使って楽すれば良かったと後悔
お知らせ
いつもお世話になっているfukuoka.exさんが小倉城という城(すごすぎ)をジャックして
ElixirConf JP 2019 Kokurajo~を開催されます
私は現在お財布と予定とにらめっこ中です
会社からElixir関連では経費が落ちないそうです。くぅ~