RoadMovie

write down memos or something I found about tech things

Elixir on PhoenixでDBConnectionエラーでアプリが落ちる場合の解決策

環境: Elixir 1.9.1, Phoenix 1.4を使用

エラー内容は下記の通り。mixにライブラリを追加した後に起こる。急にDBConnectionと言われてDB周りのバグかと思い調べたがそうではなく、mixの書き方の問題だった。

web_1   |
web_1   | Generated your_app app                                                                                                                                            
web_1   | ** (Mix) Could not start application your_app: YourApp.Application.start(:normal, []) returned an error: shutdown: failed to start child: YourApp.Repo
web_1   |     ** (EXIT) shutdown: failed to start child: DBConnection.ConnectionPool                                                                                         
web_1   |         ** (EXIT) exited in: GenServer.call(DBConnection.Watcher, {:watch, DBConnection.ConnectionPool.Supervisor, {DBConnection.ConnectionPool.Pool, {#PID<0.374.$>, #Reference<0.342264912.689831938.179060>, Postgrex.Protocol, [types: Postgrex.DefaultTypes, repo: YourApp.Repo, telemetry_prefix: [:your_app, :repo], otp_app: :your_app, timeout: 15000, username: "postgres", password: "postgres", database: "your_app_dev", hostname: "db", port: 5432, pool_size: 10, pool: DBConnection.ConnectionPool]}}}, infinity)                                                                                                                                                                    
web_1   |             ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't $
tarted

起こったこととしては下記と同様。 elixirforum.com

解決策としては下記のリンクの通り。

www.amberbit.com

ライブラリを入れる時に mix.exs の下記パートに applications: [:library_name] を書くとREADMEにあることが多々あるが、Elixirがよしなにやってくれるので書かなくてよい。

def application do
  [
    mod: {YourApp.Application, []},
    extra_applications: [:logger, :runtime_tools] 
  ]
end

私が今回入れてこのバグを引き起こしたのは下記のライブラリ。こちらのREADMEを読むと、applicationsパートにライブラリ名を追加しているが、それは不要。 GitHub - fdietz/elixir-feed-parser: Elixir Feed Parser

エラー文言から理解しにくいバグなので、参考になれば。これPhoenixのバージョンいくつ以降は書かないでよくなったみたいな感じなのかも。Elixir, Phoenixは初学者なのでそのあたりの知見がない。