MIX_ENV=prodのときPhoenixはassetsのbuildを自動でしない

Elixir Phoenix Web
更新2020/10/20
Phoenixはprodを指定して起動するとcssやjsをbundleしません。

結論

MIX_ENV=prodを指定してserverを起動するときは、webpackのbuildが自動で走りません。
ので手動で下記をする必要があります。
$ npm run deploy --prefix ./assets # webpackによるassetsのbuild
$ mix phx.digest # priv/staticにファイルを配置

ちなみに公式リファレンスにも書いてあります。


ところで

watchers: [
  node: [
    "node_modules/webpack/bin/webpack.js",
    "--mode",
    "development",
    "--watch-stdin",
    cd: Path.expand("../assets", __DIR__)
  ]
]
で、その説明は `deps/phoenix/lib/phoenix/endpoint.ex` に書いてあって
* `:watchers` - a set of watchers to run alongside your server. It
  expects a list of tuples containing the executable and its arguments.
  Watchers are guaranteed to run in the application directory, but only
  when the server is enabled. For example, the watcher below will run
  the "watch" mode of the webpack build tool when the server starts.
  You can configure it to whatever build tool or command you want:

      [node: ["node_modules/webpack/bin/webpack.js", "--mode", "development",
          "--watch-stdin"]]
早い話 `node_modules/webpack/bin/webpack.js` を叩いてwebpack起動してるけど、好きに書き換えて好きなビルドツール使ってね。ということらしい。

書いた人/このブログについて

サーバーサイドエンジニア。お仕事ではRubyとPerl。趣味ではC#やHLSLなどを少しと、3DCGでPythonをごまかしながら使う感じ。Unityとインフラ周りも好き。

自分の備忘録もGoogle検索に任せたくてこのブログ書いてる。Phoenix製でEC2上で稼働中。