🐣

Phoenix のチュートリアルでめっちゃエラー出る

2021/08/26に公開

タイトルの通り,Phoenix 公式のチュートリアルを進めていたらエラーが出て困ったので,その原因と解決方法をまとめます.

この記事が Phoenix のチュートリアルをサクッと試してみる助けとなっていただけたら嬉しいです.

対象読者

Phoenix 公式のチュートリアルを進めようと思っている方,進めている方.

前提条件

こちらのドキュメントに従い,チュートリアルを進める上で必要な各種ソフトウェアのインストールは完了しているものとします.

環境

  • OS
    • macOS Big Sur 11.5.2 (Intel Core)
  • Elixir
    • 1.12.0
  • Erlang/OTP
    • 24
  • Phoenix
    • 1.5.12
  • Node.js
    • 16.7.0
  • npm
    • 7.20.3
  • PostgreSQL
    • 13.4

エラーが出たコマンド

  • npm install
  • mix ecto.create

npm install

mix phx.new hello を実行した後,「Fetch and install dependencies? [Yn]」 と聞かれます.
これに Y と答えると実行される最後のステップの中に npm install があります.

$ mix phx.new hello
...省略...

Fetch and install dependencies? [Yn] Y
* running mix deps.get
* running mix deps.compile
* running cd assets && npm install && node node_modules/webpack/bin/webpack.js --mode development

ここでは特にエラーメッセージが表示されないのですが,続く出力を見てみると......

We are almost there! The following steps are missing:

    $ cd hello
    $ cd assets && npm install && node node_modules/webpack/bin/webpack.js --mode development

...省略...

実行されたはずのステップが不足していると言ってますね.妙だな......

原因の特定は割と簡単で,先ほどのステップをもう一度実行してみると,今度は大量のエラーメッセージが表示されて npm install でコケているのがわかります.

$ cd assets && npm install && node node_modules/webpack/bin/webpack.js --mode development
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
...省略...

幸いなことに,この問題はこちらの issue で議論されていて,解決に至っていました.
どうやらエラーの原因はパッケージ間の依存関係にあるようです.assets ディレクトリにある package.json 内の node-sasssass に書き換え,そのバージョンを 1.35.1 とすると解決できます.
具体的には,以下の部分を

"node-sass": "^4.13.1"

次のように書き換えます.

"sass": "^1.35.1"

mix ecto.create

データベースを作ろうとこのコマンドを叩いてみると,GenServer が突然死んでしまいます.

$ mix ecto.create
Compiling 14 files (.ex)
Generated hello app

23:18:44.852 [error] GenServer #PID<0.379.0> terminating
** (DBConnection.ConnectionError) tcp connect (localhost:5432): connection refused - :econnrefused
    (db_connection 2.4.0) lib/db_connection/connection.ex:100: DBConnection.Connection.connect/2
    (connection 1.1.0) lib/connection.ex:622: Connection.enter_connect/5
    (stdlib 3.15) proc_lib.erl:226: :proc_lib.init_p_do_apply/3
Last message: nil
State: Postgrex.Protocol

...省略...

このエラーの原因は PostgreSQL を起動していないことでした.だって書いてなかったから......

Homebrew で PostgreSQL をインストールした私は,こちらの記事を参考にして以下のように起動しました.

brew services start postgresql

やったか!?

これらのエラーに対処して,プロジェクトのトップディレクトリから mix phx.server 叩いて,ブラウザから http://localhost:4000 を開いたら......

やった!!!!!!!!!!!

GitHubで編集を提案

Discussion