EC2サーバー上でrake db:migrateができません
起きているエラー
ローカルにてRailsを使ったWebアプリを作成し、AWS上にあげようとしています。
主にこちらの記事を参考に作業を進め、EC2インスタンスとRDSインスタンスを作成、
ローカルのターミナルからEC2サーバーにSSH接続し、そこからmysqlに接続できることも確認しています。
GitHubからアプリをクローンし、unicornとnginxの設定をして、
rake db:create RAILS_ENV=production
したところで、
Mysql2::Error::ConnectionError: Access denied for user 'user'@'localhost' (using password: NO)
というエラーが出て解決できないでおります。
(※user
のところは私の名前で、サーバーに接続したりmysqlのユーザーとしても登録している名前です)
EC2サーバーからアクセスしているのに'user'@'localhost'
となっていて、
そこの設定がおかしいのだと思うのですが、なぜそうなっているのかがわかりません。
(RDSのユーザー名はrootに設定しました)
環境
バージョン | |
---|---|
Ruby | 3.0.0 |
Ruby on Rails | 6.1.3 |
MySQL | 8.0 |
試したこと
database.ymlの確認
myapp/config/fatabase.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV['DATABASE_USERNAME'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /tmp/mysql.sock
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
adapter: mysql2
encoding: utf8
database: myapp_production
username: <%= ENV['MYAPP_DATABASE_USERNAME'] %>
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
host: <%= ENV['MYAPP_DATABASE_HOST'] %>
myapp/.envrc ※下記パスワードは実際のものとは異なります
export DATABASE_USERNAME=root
export DATABASE_PASSWORD=password(ローカルで設定したもの)
export MYAPP_DATABASE_USERNAME=root(RDSのユーザー名)
export MYAPP_DATABASE_PASSWORD=password(RDSで設定したもの)
export MYAPP_DATABASE_HOST=RDSのエンドポイント
ローカルではdirenvを使っていたので、サーバー上にも.envrc
を作成し、同じ内容で変数を定義し直しています。
こちらに入っているユーザー名とパスワードでサーバー上からのMySQLへの接続は
mysql -h エンドポイント -u root -p
で、できています。
.envrcの読み込みがうまく行っていないとかと思い、
こちらにならって、ccredentials.yml.enc
に記載する方法も試しましたが結果は変わらずでした。
MySQLのユーザーを作成して権限を付与
試しに、EC2サーバーからMySQLに接続して、エラーが出ていたuser
と同じ名前のユーザーを作成、
myapp_production
へのアクセスを許可してみましたが、結果は変わらずでした。
※こちらを参考にしました。
トンチンカンなことばかり試しているような気がしますが、調べても他に方法が見つからず、困っております。
他に足りていない情報がありましたらご教示ください。
何かアドバイスいただけますと幸いです。よろしくお願いいたします。