Elastic Beanstalk で Railsアプリをデプロイする時にハマったとこ
まとめ
Elastic Beanstalk へデプロイした経験から、ハマりやすいポイントをまとめました。
詳細については、以下の__1回目__と__2回目__のところを参照してみてください。
- セキュリティグループ
- MySQL エンコード
- .ebextension 設定
- 各gemの対応
1回目
-
文字コード(日本語の場合、utf8 へ変更必要)
-
セキュリティグループ
(Mysql2::Error: Can't connect to MySQL server on '*************.********.ap-northeast-1.rds.amazonaws.com' (4))- EC2 と RDS を同じVPC/サブネット上に置く方法
- RDS のセキュリティグループに EC2 からのアクセスを許可する。
- EC2 と RDS を同じVPC/サブネット上に置く方法
-
rails db:createをやってくれない?
(Mysql2::Error: Unknown Databese'**********')- 下記コマンドにて、自分でMySQLに接続して、DB作成。
-
MySQL への接続(EC2上で(eb ssh))
- mysql -h ********..ap-northeast-1.rds.amazonaws.com -P 3306 -u ***** -p
-
DB作成
- create database ***********;
-
utf8 へ変更されているかコマンドを実行して確認
-
- 下記コマンドにて、自分でMySQLに接続して、DB作成。
-
initializers/carrierwave.rb 用に beanstalk へS3設定を追記
2回目
-
eb init
-
eb create
-
RDS 作成
-
ebに環境変数を格納
-
.ebextensionを記述
-
eb deploy
-
EC2 cd /var/app/ondeck/ 内で
- bundle update --bundler
- gem install bundler:2.0.2
-
local上の Ruby のversionを上げることでglobal環境のversionと合わせる
# install可能なversionを表示
$ rbenv install -l
# versionを指定してinstall
$ rbenv install 2.6.5
# インストールしたversionを使用可能な状態にする⇒shimsへの反映
$ rbenv rehash
$ rbenv local 2.6.5
$ rbenv global 2.6.5
- bundler のバージョンがあっていない?
(参照:Gem::GemNotFoundExceptionと出てきたときの対処法 - Qiita)
$ gem install bundler -v '1.17.3'
$ bundle install
- MySQLのインストールでエラーが出る。
mysql2 gemインストール時のトラブルシュート - Qiita
$ gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib
-
nodeのversionが古いとかいうエラーがでた、mini-racer っていうgemを追加すれば直るって記述があった
(ruby on rails - ERROR: ServiceError - Failed to deploy application. on ElasticBeanstalk - Stack Overflow) -
mini-racer入れたら直った??
- .ebextension に rails db:create を追加
-
RDS のセキュリティグループを変更
-
Sequel Pro から MySQLに接続できるかどうかを確認。→ できなかった
-
EC2 に入って、コマンドで接続できるか
$ mysql -h *****RDSインスタンス*****.ap-northeast-1.rds.amazonaws.com -P 3306 -u **DB名** -p
→ 接続できた。
つまり、他の問題?
-
EC2内から直接、DB(-)を作成するコマンドを打ったところ、ハイフンは使えないということを言われる。
→ 環境設定の - を _** へ変更。 -
再度、eb deployしたところ、同じエラーが出る。
→ わからないので、MySQLの中から _** を作成してしまって、再度 eb deploy -
エラーコードが変わって、MySQLのエンコードが問題っぽい。
[AWS][RDS][MySQL] 文字コードをutf8mb4にする - Qiita
【MySQL】Mysql2::Error: Incorrect string value 【エラー】 - Qiita
-
対象のRDSのパラメーターグループをさっき変更したものに指定する。
-
作ったDBを一旦削除して、作成し直す。
-
これも意味がなく、過去のEBではまったところが確認し直したところ、以下の記事を見つける。
RDSに作成したMySqlのDatabaseに日本語が登録出来ない問題 - Qiita
ALTER DATABASE データベース名 default character set utf8;
- 下記エラーコードが出たので、crontabのコードを削除して、再度デプロイしてみる。
container_command 06-crontab in .ebextensions/02_setup_app.config
ようやくデプロイ完了!!
追記
後日発生したエラー
- asset_pipeline 絡みのエラー
- ebextension に追記。
- https://dev.classmethod.jp/server-side/eb-asset-precompile/
- スワップ領域の確保
- 「asset precompile でメモリ不足になることがよくある。」らしい・・・。
- https://qiita.com/takp/items/81dac88ca183ada8af25