AMIMOTO + ApolloなサイトでCodeDeployがこけた時の覚書
俺得記事シリーズなので、それぞれの説明はすっ飛ばします。 前提 サーバーはAMIMOTO AMI WordPressはApolloを利用 Circle CI + CodeDeployで自動デプロイ化している 問題 以下の […]
目次
俺得記事シリーズなので、それぞれの説明はすっ飛ばします。
前提
- サーバーはAMIMOTO AMI
- WordPressはApolloを利用
- Circle CI + CodeDeployで自動デプロイ化している
問題
以下のエラーでデプロイが失敗するようになった。
[stderr]Command failed: configure: error: no nasm (Netwide Assembler) found
[stderr]
[stderr] at ChildProcess.exithandler (child_process.js:658:15)
[stderr] at ChildProcess.emit (events.js:98:17)
[stderr] at maybeClose (child_process.js:766:16)
[stderr] at Process.ChildProcess._handle.onexit (child_process.js:833:5)
[stderr] ✔ optipng pre-build test passed successfully
[stderr] ⚠ Couldn't execute the `/var/www/vhosts/example.com/app/themes/example/node_modules/pngquant-bin/vendor/pngquant` binary. Make sure it has the right permissions.
[stderr] ⚠ pngquant pre-build test failed
[stderr] ℹ compiling from source
[stderr] ✖ Error: pngquant failed to build, make sure that libpng-dev is installed
[stderr] at ChildProcess.exithandler (child_process.js:658:15)
[stderr] at ChildProcess.emit (events.js:98:17)
[stderr] at maybeClose (child_process.js:766:16)
[stderr] at Process.ChildProcess._handle.onexit (child_process.js:833:5)
[stderr]
[stderr]/var/www/vhosts/example.com/app/themes/example/node_modules/imagemin-pngquant/index.js:2
[stderr]const execBuffer = require('exec-buffer');
[stderr]^^^^^
[stderr]SyntaxError: Use of const in strict mode.
[stderr] at Module._compile (module.js:439:25)
[stderr] at Object.Module._extensions..js (module.js:474:10)
[stderr] at Module.load (module.js:356:32)
[stderr] at Function.Module._load (module.js:312:12)
[stderr] at Module.require (module.js:364:17)
[stderr] at require (module.js:380:17)
[stderr] at Object.<anonymous> (/var/www/vhosts/example.com/app/themes/example/gulpfile.js:16:16)
[stderr] at Module._compile (module.js:456:26)
[stderr] at Object.Module._extensions..js (module.js:474:10)
[stderr] at Module.load (module.js:356:32)
問題の整理と対応
解決してから判明したのですが、2つのエラーが発生していました。
configure: error: no nasm (Netwide Assembler) found
「nasmがない」と言われています。
[stderr]Command failed: configure: error: no nasm (Netwide Assembler) found
[stderr]
[stderr] at ChildProcess.exithandler (child_process.js:658:15)
[stderr] at ChildProcess.emit (events.js:98:17)
[stderr] at maybeClose (child_process.js:766:16)
[stderr] at Process.ChildProcess._handle.onexit (child_process.js:833:5)
[stderr] ✔ optipng pre-build test passed successfully
[stderr] ⚠ Couldn't execute the `/var/www/vhosts/getshifter.io/app/themes/shifter/node_modules/pngquant-bin/vendor/pngquant` binary. Make sure it has the right permissions.
[stderr] ⚠ pngquant pre-build test failed
[stderr] ℹ compiling from source
[stderr] ✖ Error: pngquant failed to build, make sure that libpng-dev is installed
[stderr] at ChildProcess.exithandler (child_process.js:658:15)
[stderr] at ChildProcess.emit (events.js:98:17)
[stderr] at maybeClose (child_process.js:766:16)
[stderr] at Process.ChildProcess._handle.onexit (child_process.js:833:5)
[stderr]
ただしnasmは存在しますので、入れれば解決というわけではありません。
env > /tmp/env
をビルド時のスクリプトに追加してデバッグします。
するとsshで作業する場合はPATH
が/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin
なのですが、Code Deploy Agentからの場合PATH=/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/opt/aws/bin
と少し少なくなっていました。
とうことでexport PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin
をビルドスクリプトに追加して対応しました。
SyntaxError: Use of const in strict mode.
こっちはgulp実行時のエラーです。
[stderr]/var/www/vhosts/example.com/app/themes/example/node_modules/imagemin-pngquant/index.js:2
[stderr]const execBuffer = require('exec-buffer');
[stderr]^^^^^
[stderr]SyntaxError: Use of const in strict mode.
[stderr] at Module._compile (module.js:439:25)
[stderr] at Object.Module._extensions..js (module.js:474:10)
[stderr] at Module.load (module.js:356:32)
[stderr] at Function.Module._load (module.js:312:12)
[stderr] at Module.require (module.js:364:17)
[stderr] at require (module.js:380:17)
[stderr] at Object.<anonymous> (/var/www/vhosts/example.com/app/themes/example/gulpfile.js:16:16)
[stderr] at Module._compile (module.js:456:26)
[stderr] at Object.Module._extensions..js (module.js:474:10)
[stderr] at Module.load (module.js:356:32)
よくよく確認すると、rootユーザーでのnodeのバージョンが古いもののままでした。
CodeDeploy Agentはrootで動くので、バージョンをアップデートしておきます。
おわりに
とりあえず以上です。
Apolloはcomposerでプラグイン管理できたり本番とテスト環境で設定が切り替わるようになっていたりとなかなか便利な感じですので、ぜひ触ってみてください。