webpackプロジェクトのCircleCI上のビルドに失敗する
webpackを使っているSPAプロジェクトを、CircleCIでビルドしようとしたら以下のエラーが出て失敗した。
npm run build > my_project@1.0.0 build:staging /home/circleci/repo > webpack --config ./webpack.config.js Starting type checking service... Using 1 worker with 2048MB memory limit events.js:167 throw er; // Unhandled 'error' event ^ Error: read ECONNRESET at Pipe.onread (net.js:656:25) Emitted 'error' event at: at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! casting_asia_advertiser_frontend@1.0.0 build:staging: `webpack --config ./webpack.config.staging.js` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the casting_asia_advertiser_frontend@1.0.0 build:staging script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/circleci/.npm/_logs/2019-08-07T08_22_22_942Z-debug.log Exited with code 1
結論から言うと、ビルドに thread-loader を使っていたことが原因だった。
この Issue によると、
Perhaps this value should get set when CI:true to something lower, or expose an environment variable that would allow overriding that value.
ということなので、CI上のときはworkerの数を減らしてみる。
CI上かどうかは、CircleCIの場合は CI=true
という環境変数で判別できる。
// 省略 // CIかどうかを環境変数から判別 const CI = process.env.CI; module.exports = { // 省略 module: { rules: [ { test: /\.(j|t)sx?$/, exclude: /node_modules/, use: [ // 省略 { loader: 'thread-loader', options: { // CI上なら workerの数を減らす。そうでないならデフォルトの値で。 workers: CI ? 4: undefined }, }, // 省略 } ] }, };
ビルドできました。
退職しました & タイ・バンコクの会社に転職します
実は9月某日で、新卒で入社した会社を退職していました。 充電期間を終え、11月からタイのバンコクに移住し、エンジニアをやっていくことになりました。 分析コンサル会社から、広告系中心の事業会社です。わかる人には会社名わかりそうですね。 担当領域は、データサイエンスやフロントエンドに限らず、いろいろとやる予定です。サーバーサイドとかも。
いつか海外で働きたいとはボンヤリ思っていたのですが、まさかこんなに早く実現するとは思いませんでした。 はじめての海外生活なので正直ビビってるのですが、 日本人も多いバンコクなので、生活面はなんとかなるんじゃないかと高をくくっています。
問題は語学面で、エンジニアリング部署は英語で会話するそうです。 英語力が駄目駄目なので、働きながら語学力を身につけなければなりません。 とはいえ、私の英語力でいきなりアメリカとかの英語圏だったら厳しかったですが、 バンコクに集まるエンジニア内での会話なのでまだなんとかなるかもしれません。最初は痛い目にあうでしょうけど。。
英語力ゴミ状態の私を採用していただいた転職先に感謝します。 タイ語も勉強していきたいですね。
移住後は、現地コミュニティに参加したり、GAOGAO を見学したりしたいです。 タイでのR言語の浸透ぐあいはよくわからなかったので、ひっそりとR言語やShinyを布教したいですね。
転職についての詳しい経緯とかはTwitterやブログでちょいちょい書くかもしれないですし、書かないかもしれません。 ホームシックになる可能性もあるので、ときどき日本に帰ってきた際は絡んでいただければ泣いて喜びます。
約束しているお仕事で関わっている方々には、もろもろ遅れておりご迷惑をおかけしております。 充電終わったのでなんとか取り戻します。
今後とも宜しくお願いいたします。
↓アサマシくも例のリスト
http://amzn.asia/h71JfQF
ShinyアプリをDockerでhttps化する
公開中の Shiny アプリ 「確率分布Viewer」 を、この度 https 化しました。 新しい URL はこちらです。
ドメインは設定済みの前提で、そのやり方を備忘録として記載します。
Dockerの用意
まず、Shiny を Docker で起動できるようにする必要があります。 私はもともと rocker/shiny イメージを使用して、本番環境にDockerを採用していました。
そのあたりは過去の記事をご参照ください。
https-portal を使う
Docker アプリの https 化には、 https-portal
が便利です。
https-portal
は、証明書周りの手続きを全て自動化してくれる超凄い Docker イメージです。
公式ページの設定からほとんど変えなくても、https 化できてしまったので超オススメです。
詳しい使い方は GitHub および このあたりの記事 をご参照ください。
以下、私の設定の備忘録です。
Shinyアプリと https-portal
を組み合わせるために、docker-compose
を使います。
docker-compose.yml
に、以下のように記載してください。
https-portal: image: steveltn/https-portal:1 ports: - '80:80' - '443:443' links: - yourapp restart: always environment: DOMAINS: 'yourdomain.com -> http://yourapp:3838' # <- rockerを使う場合は3838が必要! # STAGE: 'production' # <- 本番環境ではコメントアウトを外す yourapp: build: . # Shinyアプリ用のDockerfile
基本的には、公式ページの設定とほとんど同じです。
唯一注意することは、rocker/shiny
が 3838
ポートを使用しているため、DOMAINS
にもポートを記載する必要があるということです。
DockerComposeの実行
準備ができましたら、本番環境のサーバに対し、
docker-compose build docker-compose up -d
と実行しましょう。
しばらく待てば、無事 https 化完了しているはずです。