#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データを生成できました。
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というロール名はありませんでした。
おわりに
今回の件で以下のことを学んだ。
- AWSのデータベースに関する操作はAWSにログインして実行する
- ローカル環境・AWS環境のデータベースとロールは同じでないこと