CORESERVERでThreadPoolBuildErrorが出た場合の対処法
はじめに
このブログは現在、Cloudflare Pagesの無料枠とAstroを使って構築しています。しかし、ページ数が増えるにつれてビルド時間が長くなってきたので、ビルド時の環境構築やビルド成果物のアップロードにかかる時間をなくすために、CORESERVERの導入を検討しています。
実際に導入する前にCORESERVERの30日間無料体験で試してみたところ、後述のエラーによってOGP画像の自動生成が失敗することが判明しました。今回は、その対処法について紹介します。
エラー内容
Astroのビルド中に次のようなエラーが発生しました。具体的には、OGP画像の自動生成に使用しているSatoriの内部でエラーが発生していると思われます。
エラーメッセージを読むと、Rustの並列処理ライブラリーであるRayonの処理中にエラーが発生しているようです。
Next.jsで同様のエラーが発生した場合は、swcMinify
をfalse
に設定することで解決するという記事がいくつかありました。しかし、私の場合はNext.jsではなくAstroを使っているため、この対処法は使えません。
- Next.jsでnpm run buildできないときはnext.config.jsの swcMinifyをfalseにするとnpm run buildできるかもしれない。 #Next.js - Qiita
- CORESERVERでNext.jsは動くけどビルドできない | PeakAlive
- javascript - NEXTJS - Production Build Error - panicked at ‘the global thread pool has not been initialized - Stack Overflow
解決方法
しばらくインターネットをさまよっていたところ、こちらのDiscussionsを見つけました。
内容としては簡単で、環境変数にRAYON_NUM_THREADS=1
を設定すれば解決できるというものです。
これを試してみると、エラーが解消されました。CORESERVERはLinuxなので、export
コマンドを使って環境変数を設定します。
手元の環境では、RAYON_NUM_THREADS=64
でも問題なく動作しました。CORESERVERの仕様が最大64コアとなっていたので、それに合わせた数値を設定しました。64でも引き続きエラーが出る場合は、数値を減らしてみてください。