2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AL2内のElastic Beanstalk環境でbundle exec rails c (rails console) する方法

Last updated at Posted at 2022-05-26

Amazon Linux 1(AL1)

$ eb ssh
$ sudo su -
# cd /var/app/current
# bundle exec rails c

Amazon Linux 2(AL2)

$ eb ssh
$ sudo su -
# /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /opt/elasticbeanstalk/support/envvars
# sudo su - webapp
$ source /opt/elasticbeanstalk/support/envvars
$ rbenv shell $(rbenv global)
$ cd /var/app/current
$ bundle exec rails c

ちょっとだけ解説

AL1のEB環境ではアプリケーションのデプロイ時にrootユーザに必要なEB環境変数等が設定された状態で実行されていました。
RubyやBundler等はシステムグローバルに入っているものが使われています。

AL2のEB環境ではwebappユーザが各種初期化スクリプトを経由してRails(Puma)を起動しています。
RubyやBundler等はrbenvによって管理されるようになりました。

webappユーザは様々なサポートスクリプトを経由してPumaを起動しますが、その際にEB環境に設定されている環境変数を取り込んでいます。
その内容が記述されているファイルをAL1と同様に扱うためにrootユーザで/opt/elasticbeanstalk/support/envvarsへ出力し、sourceによって環境変数へ反映させています。

EB環境は複数のRuby用プラットフォームからバージョンのあったものを選択する必要がありますが、64bit Amazon Linux 2 v3.4.6 running Ruby 2.7のように詳細なバージョンまで指定する方法はありません。
そのため、AL1のEB環境では参照されていなかった.ruby-versionとの食い違い1が発生してしまうことがあるのですが、それを回避するためにrbenv shell $(rbenv global)を実行し、環境変数にRBENV_VERSION=2.7.6のようなものを設定することでコマンドラインでのRubyバージョンを指定しています。

  1. 当然ですが.ruby-versionの方をプラットフォームと同じバージョンにした方が良いです

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?