『改訂新版 Elixir/Phoenix初級』シリーズ 読者サポートページ

2021/05/06

改訂新版 Elixir/Phoenix 初級①

改訂新版 Elixir/Phoenix 初級②

改訂新版 Elixir/Phoenix 初級③

改訂新版 Elixir/Phoenix 初級④

改訂新版 Elixir/Phoenix 初級⑤


ここは『改訂新版 Elixir/Phoenix 初級』シリーズの読者サポートページです。

刊行後に見つかった誤記・誤字や内容の更新などについてはこのページでお知らせします。

本書で誤字、脱字、内容の間違いなどを見つけた方は、hermes@oiax.jp までご連絡ください。

Kindle電子書籍の改訂版を入手するには


ソースコード

ダウンロード

ペーパーバック版の正誤表

トラブルシューティング

npm install が失敗する問題への対処法

『初級②』〜『初級⑤』で作成する NanoPlanner において、npm install コマンドが失敗する問題が報告されています。

具体的には、NanoPlanner のプロジェクトディレクトリから cd assets; npm install コマンドを実行すると、次のようなエラーメッセージが表示されて失敗します。

npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated tar@2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.
npm ERR! code 1
npm ERR! path /apps/nano_planner/assets/node_modules/node-sass
npm ERR! command failed
npm ERR! command sh -c node scripts/build.js
npm ERR! Building: /usr/bin/node /apps/nano_planner/assets/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
(以下略)

エディタで assets/package.json を開き、node-sasssass-loader のバージョンを次のように変更してください。

  • node-sass: "^8.0.0"
  • sass-loader: "^10.4.0"

2023年9月12日現在における、node-sasssass-loader の最新バージョンは 9.0.013.3.2 ですが、この組み合わせではうまく行きません。NanoPlanner は webpack 4 を利用しているのですが、sass-loader 13.x には webpack 5 が必要だからです。


mix phx.server 実行時に webpack.js でエラーが発生する問題への対処法

『初級②』〜『初級⑤』で作成する NanoPlanner において、mix phx.server コマンドを実行すると次のようなエラーメッセージが出力される問題が報告されています。

Node.js v18.17.1
[error] Task #PID<0.521.0> started from NanoPlannerWeb.Endpoint terminating
** (stop) :watcher_command_error
    (phoenix 1.5.14) lib/phoenix/endpoint/watcher.ex:56: Phoenix.Endpoint.Watcher.watch/2
    (elixir 1.11.4) lib/task/supervised.ex:90: Task.Supervised.invoke_mfa/2
    (stdlib 3.14.2.3) proc_lib.erl:226: :proc_lib.init_p_do_apply/3
Function: &Phoenix.Endpoint.Watcher.watch/2
    Args: ["node", ["node_modules/webpack/bin/webpack.js", "--mode", "development", "--watch-stdin", {:cd, "/apps/nano_planner/assets"}]]

webpack is watching the files…

[hardsource:2279df90] Using 0 MB of disk space.
[hardsource:2279df90] Writing new cache 2279df90...
[hardsource:2279df90] Tracking node dependencies with: package-lock.json.
node:internal/crypto/hash:69
  this[kHandle] = new _Hash(algorithm, xofLen);
                  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:69:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (/apps/nano_planner/assets/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/apps/nano_planner/assets/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/apps/nano_planner/assets/node_modules/webpack/lib/NormalModule.js:471:10)
    at /apps/nano_planner/assets/node_modules/webpack/lib/NormalModule.js:503:5
    at /apps/nano_planner/assets/node_modules/webpack/lib/NormalModule.js:358:12
    at /apps/nano_planner/assets/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/apps/nano_planner/assets/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at iterateNormalLoaders (/apps/nano_planner/assets/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
    at /apps/nano_planner/assets/node_modules/loader-runner/lib/LoaderRunner.js:236:3
    at context.callback (/apps/nano_planner/assets/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
    at /apps/nano_planner/assets/node_modules/babel-loader/lib/index.js:44:71 {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

エディタで config/dev.exs を開き、29行目を次のように書き換えてください。

【書き換え前】

      cd: Path.expand("../assets", __DIR__)

【書き換え後】

      cd: Path.expand("../assets", __DIR__),
      env: [{"NODE_OPTIONS", "--openssl-legacy-provider"}]

Node.js のバージョンを 17 以上に上げると発生する現象です。

参考資料: https://github.com/webpack/webpack/issues/14532#issuecomment-947012063


ex-v05 をクローンした後に bin/setup.sh が失敗する問題への対処法

『初級⑤』の p.249 「付録A 各種ソフトウェアのインストール」にある、Dockerfile 等の取得のコマンドを実行した後 bin/setup.sh が失敗する問題が報告されています。

具体的には Dockerfile 等の取得で行う次のコマンドを実行し、

git clone -b ex05-rev https://github.com/oiax/phx-compose.git ex-v05
cd ex-v05

bin/setup.sh のコマンドを行うと、次のようなエラーメッセージが表示されて失敗します。

Step 12/24 : RUN sudo apt-get update
 ---> Running in 4da25b76a123
Hit:1 http://security.debian.org/debian-security buster/updates InRelease
Hit:2 https://deb.nodesource.com/node_18.x nodistro InRelease
Hit:3 http://deb.debian.org/debian buster InRelease
Hit:4 http://deb.debian.org/debian buster-updates InRelease
Ign:5 http://apt.postgresql.org/pub/repos/apt -pgdg InRelease
Err:6 http://apt.postgresql.org/pub/repos/apt -pgdg Release
  404  Not Found [IP: 217.196.149.55 80]
Reading package lists...
E: The repository 'http://apt.postgresql.org/pub/repos/apt -pgdg Release' does not have a Release file.
ERROR: Service 'web' failed to build: The command '/bin/sh -c sudo apt-get update' returned a non-zero code: 100

エディタで dockerfile を開き、次のように変更してください。

  • 16、17 行目を削除
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | \
  sudo tee /etc/apt/sources.list.d/pgdg.list
  • 19 行目の末尾 -12 を削除
RUN sudo apt-get -y install postgresql-client-12

これらを変更後、bin/setup.sh を再度実行し、『初級⑤』の p.10 「本巻から読み始める場合の準備作業」を行ってください。