最近、AWS Elasticbeanstalkにssh接続してcd /var/app/current/
し(Rails.rootに移動し)、bundle exec rake assets:precompile
を実行しても、処理が全く反映されなくて解決に時間がかかったので、今後のために原因と対策をメモしておく。
原因
https://qiita.com/yuyasat/items/4d93b4ad4f86a6e13d50 を見て気づいた。
assets:precompile実行時には多くのCPU処理能力が求められますから、CPU処理能力が低いとassets:precompileは非常に遅くなってしまいます。t2やt3系の場合バーストしてくれてCPU処理能力は上がっていきますが、少なくとも一つのコアはつねに100%を保ちながら処理を続けることになります。したがって、t2.smallなどのコア数が1のインスタンスを使っているとその状態でアクセスが来ると処理能力を超えサーバーが落ちてしまいます。(確か503 Service Temporarily Unavailableになります)
それを回避するには、バーストしない(通常からCPU処理能力が高い)EC2インスタンスタイプを利用するか、assets:precompileをEC2上で行わないようにします。
対応していたElasticbeanstalkのEC2インスタンスタイプ: t2.small になっとるやん。。。
assets:precompileが効かない対策
上記の記事では、EC2のインスタンスタイプを上げるか、CircleCI上でassets:precompileを走らせS3に上げ、それをデプロイ時にsyncするという方式、の2通りが掲載されていた。
しかし今回は、以前保守契約していたらしい受託環境の一時対応でお金かけられない、かつ、CircleCIとか当然使ってない、との事だったので、ローカルでassets:precompileさせ、対象プロジェクトのroot上で以下コマンドをターミナルより実施するという方法にトライした。
git archive -v -o acc.zip --format=zip HEAD
このコマンドでできたzipファイルをAWS ElasticbeanstalkのWEBコンソール画面からアップロードしてデプロイした。デプロイ自体は上手くいったが、今度は、undefined method 'find_asset' for nil:NilClass
というエラーが発生するようになった。。
wicked_pdf_stylesheet_link_tag がエラーになる件の対策
wicked_pdf_stylesheet_link_tagが動作していないのが原因だったようだ。
https://github.com/mileszs/wicked_pdf/issues/476 にその対策が記載されていた。
sprockets-railsのバージョンによって対応を変えないといけないっぽかった。
以下のファイルに記載されている以下の箇所をfalseからtrueに変更するだけで良い。
config.assets.compile
細かなバグだが、ログに出ていない原因を見つけるのが大変だった。。。