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でプラグイン管理できたり本番とテスト環境で設定が切り替わるようになっていたりとなかなか便利な感じですので、ぜひ触ってみてください。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark