10
16

More than 3 years have passed since last update.

AWSへのrails:db seedでハマった件と対処法

Posted at

AWSへのrails:db seedでハマった件と対処法

背景

AWS上のアプリに対してローカル環境からrails db:seedを実行したところ以下のエラーが発生し、
ハマったので記録しておきます。
*エラーは task-appというroleがAWS上にありません というエラー

MAC: XXX$ bundle exec rails db:seed RAILS_ENV=production
rails aborted!
ActiveRecord::NoDatabaseError: FATAL:  role "task-app" does not exist

目次


動作環境

OS : macOS Mojave 10.14.6
ruby : 2.6.3p62
rails : 5.2.4

結論

AWS上で/var/www/アプリケーション名/currentに移動し、以下を実行することでseedデータを生成できました。

aws
bundle exec rails db:seed RAILS_ENV=production

経緯

AWS上にtask-app名でroleは作成し、databaseも作成していました。
そのため、なぜ作成したはずのロール名でrole does not existエラーが出てしまうのかと原因がわからず格闘していました。

 原因

メンターに確認したところ

AWS上のデータベースのseedの実行は、AWS上のデータベースに対して実施、作る必要があります。
したがって、AWSにログインして、そこでrails コマンドを実行する必要があります。
Herokuの場合は、herokuコマンドによって、Herokuのサイトにあるデータベースを作りに行ってくれますが、、AWSの場合は、自分でログインして実行する必要があります。
ローカル、Heroku、AWSのデータベースはそもそも作成している場所が全く違います。

つまりエラーの原因は本番環境のデータベース操作をローカル環境から行おうとしていたこと。
Herokuではローカル環境からできていたので、AWSもローカル環境からできると思っていました。

実際、ローカル環境のロールを確認してみるとtask-appというロール名はありませんでした。

image.png

おわりに

今回の件で以下のことを学んだ。
1. AWSのデータベースに関する操作はAWSにログインして実行する
2. ローカル環境・AWS環境のデータベースとロールは同じでないこと

10
16
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
10
16