Elastic Beanstalkで、Rails(PostgreSQL)アプリケーションをデプロイしよう!
はじめに
- Elastic Beanstalk CLIのインストール
- データベースのセットアップ
- 環境の作成〜デプロイまで
などはこちらに詳しく書かれてますので割愛します。
以下、詰まった点をまとめます。
環境
- Ruby 2.6.5
- Rails 5.2.3
- bundler 2.0.2
詰まった所① リージョンの設定
Elastic Benastalkの管理画面のリージョンがなぜか「シンガポール」になっており、
eb create
しても全く反映されず、何度も作り直すハメに。。
超基本的な事ですが、ここが「東京」(指定したリージョン)になっているか確認しましょう。
詰まった所② マスターキーの設定
忘れがちなのが、Rails5.2から導入されたマスターキーの設定です。
自身のプロジェクト内のmaster.key
からキーをコピーして、
eb setenv
コマンドでRAILS_MASTER_KEYを設定できます。
もしくは、管理画面の[設定]→[環境プロパティ]欄から、下記のように設定できます。
詰まった所③ データベースの設定
環境変数の設定が少しややこしいので補足します。
データベースを作成し、config/database.yml
を作成した後、
環境変数を設定する必要があります。
こちらでは、eb setenv
コマンドを使用していましが、マスターキーの設定と同様、管理画面からも設定できます。
各環境変数は、管理画面の[設定]→[データベース]から参照できます。
参照した値を[設定]→[環境プロパティ]から設定してください。
詰まった所④ assets:precompileの途中でエラーが起きてしまう。
rake aborted!
ExecJS::RuntimeError:
(execjs):1
/opt/rubies/ruby-2.6.5/bin/bundle:23:in `load'
/opt/rubies/ruby-2.6.5/bin/bundle:23:in `<main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace).
Incorrect application version "app-7f9e-191030_161041-stage-191030_161041" (deployment 3). Expected version "app-7f9e-191030_154017" (deployment 2).
100 % of CPU is in use.
こんなエラーが出ました。
CPUが100%使われているのが原因のようです。
環境によりますが、管理画面の[設定]→[環境プロパティ]で、t2.micro => t2.mediumに変更して解決しました。(t2.smallでもいけた。)
詰まった所⑤ アセットパイプライン
アセットパイプラインが正しく使えておらず、フォントが表示されませんでした。
Herokuではなぜか表示できていたのですが、Beanstalkでは「正確に」設定する必要があるようです!
Rails Asset Pipelineがうまくいかないときの問題の切り分けかたを参考にさせていただきmした
私の場合、CSSのurl()などで指定するリンク指定が間違っていました
- css形式は使えないので、scssに変更
- scss内のurl
=> asset_url
に変更
を行い、無事プリコンパイルされたフォントを読み込むことができました!
詰まった所⑥ Bundlerのバージョンが合ってないと怒られる
Bundlerのバージョンが合ってない〜、
bundler —-version 2.0.2をinstallして!と怒られます。
こちらを参考に、bundlerの.ebextensions
ディレクトリを作成してconfigファイルを作成してください。
files:
# Runs before `./10_bundle_install.sh`:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/09_gem_install_bundler.sh" :
mode: "000775"
owner: root
group: users
content: |
#!/usr/bin/env bash
EB_APP_STAGING_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_staging_dir)
EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir)
# Source the application's ruby, i.e. 2.6. Otherwise it will be 2.3, which will give this error: `bundler requires Ruby version >= 2.3.0`
. $EB_SCRIPT_DIR/use-app-ruby.sh
cd $EB_APP_STAGING_DIR
echo "Installing compatible bundler"
gem install bundler -v 2.0.2
gem update --system
このconfigファイルでbundle_install
が行われる前に、gem install bundler -v 2.0.2
が行われ、
無事bundlerがインストールできました。。
(追記)アセットパイプラインを正しく、設定し直してデプロイし直したら、エラーが出なくなりました。
原因が分かりません。。誰か詳しい方教えてください(>_<)
役に立つコマンドオプション
ステージングした段階で、デプロイして試したい!
$ eb deploy --staged
コマンドがタイムアウトするまでの時間を延長したい!(タイムアウトが早いため)
$ eb deploy --timeout 30 # タイムアウトまで30分になる
詳しくは、公式ドキュメントを参考に。
最後に
とても便利なPaaSではありますが、
- デプロイにとても時間がかかる(20分以上くらい)
- 設定変更の反映にも時間がかかる
- Herokuよりも設定画面が分かりにくい
がデメリットかなと感じました。
次は、こちらを試してデプロイを高速化してみようと思います。
そして何よりインフラ知識が無いに等しいので、中で何が行われてるのか基礎から勉強しないとですね!
参考
以下の記事を参考にさせていただきました。ありがとうございました。
Author And Source
この問題について(Elastic Beanstalkで、Rails(PostgreSQL)アプリケーションをデプロイしよう!), 我々は、より多くの情報をここで見つけました https://qiita.com/tatsugon14/items/0f43703830986b4a4697著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .