LoginSignup
1
0

More than 3 years have passed since last update.

【Rails】AWS Elasticbeanstalk上でassets:precompileが効かない& wicked_pdf_stylesheet_link_tag がエラーになる件の対策

Last updated at Posted at 2019-06-18

最近、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/environments/production.rb
config.assets.compile

細かなバグだが、ログに出ていない原因を見つけるのが大変だった。。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0