質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

解決済

[Rails]ECSコンテナ上で"rails bd:seed"を実行したときだけ"Mysql2::Error: Unknown database ''myapp_databased'"が出る

hajsu00
hajsu00

総合スコア151

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1回答

0グッド

0クリップ

314閲覧

投稿2022/06/09 22:09

編集2022/06/09 22:38

RailsアプリをECS Fargate起動タイプへデプロイし、コンテナ内でrails db:seedを実行中に発生したMysql2::Error: Unknown databaseが解決できません。

ご助言いただけると幸いです。

環境

  • ruby 3.0.1
  • Rails 6.1.4.4
  • docker 20.10.12
  • docker-compos 1.29.2

起きている問題

ECSにRailsアプリをデプロイしたところログイン画面までは表示されるが、ログインを実行するとwe are sorry but something went wrongが表示される。
ログを確認したところseedの実行に失敗していたことが原因だとわかりました。
デバッグのためECS内のコンテナ内にローカルから接続してrails db:seedを実行したところ、seed.rbの46行目(59行目)でMysql2::Error: Unknown databaseが発生しました。

前提事項

データベースのdrop, create自体はできている。
rails db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1
rails db:create
rails db:migrate
RAILS_ENV=productionと明示的に指定しても症状は変わりませんでした。

ログ

bash

1# rails db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 2Dropped database 'myapp_database' 3# rails db:create 4Created database 'myapp_database' 5# rails db:migrate 6== 20210217091829 CreateAircraftTypes: migrating ============================== 7-- create_table(:aircraft_types) 8 -> 0.0226s 9== 20210217091829 CreateAircraftTypes: migrated (0.0227s) ===================== 10 11() 12 13== 20220412223845 CreateLicenses: migrating =================================== 14-- create_table(:licenses) 15 -> 0.0316s 16-- add_index(:licenses, [:user_id, :license_category_id, :aircraft_category_id], {:unique=>true, :name=>"index_for_user_license"}) 17 -> 0.0269s 18== 20220412223845 CreateLicenses: migrated (0.0588s) ========================== 19 20== 20220414104910 CreateReccurentHistories: migrating ========================= 21-- create_table(:reccurent_histories) 22 -> 0.0313s 23== 20220414104910 CreateReccurentHistories: migrated (0.0314s) ================ 24 25# rails db:seed 26rails aborted! 27ActiveRecord::StatementInvalid: Mysql2::Error: Unknown database 'myapp_database' 28/var/www/myapp/db/seeds.rb:59:in `block in <main>' 29/var/www/myapp/db/seeds.rb:46:in `times' 30/var/www/myapp/db/seeds.rb:46:in `<main>' 31 32Caused by: 33Mysql2::Error: Unknown database 'myapp_database' 34/var/www/myapp/db/seeds.rb:59:in `block in <main>' 35/var/www/myapp/db/seeds.rb:46:in `times' 36/var/www/myapp/db/seeds.rb:46:in `<main>' 37Tasks: TOP => db:seed 38(See full trace by running task with --trace)

関係するコード

seed.rb

ruby

1# ユーザー 2# メインのサンプルユーザーを1人作成する 3ActionMailer::Base.perform_deliveries = false 4user = User.create!(name: "Example User", 5 email: "example@railstutorial.org", 6 introduction: "ここはユーザーのプロフィール文です。入力可能な文字数は160字にする予定です。ここはユーザーのプロフィール文です。入力可能な文字数は160字にする予定です。ここはユーザーのプロフィール文です。入力可能な文字数は160字にする予定です。ここはユーザーのプロフィール文です。入力可能な文字数は160字にする予定です。", 7 location: "東京", 8 password: "foobar", 9 password_confirmation: "foobar", 10 admin: true, 11 confirmed_at: Time.zone.now) 12user.avatar.attach(io: File.open(Rails.root.join('app/assets/images/default_avatar.png')), filename: 'default_avatar.png') 13user.user_cover.attach(io: File.open(Rails.root.join('app/assets/images/default_cover.png')), filename: 'default_cover.png') 14 15AircraftType.create!(aircraft_type: 'ASK21', category: 'glider') 16AircraftType.create!(aircraft_type: 'ASK21B', category: 'glider') 17AircraftType.create!(aircraft_type: 'ASK23b', category: 'glider') 18AircraftType.create!(aircraft_type: 'Cessna 152', category: 'aeroplane') 19AircraftType.create!(aircraft_type: 'Cessna 172', category: 'aeroplane') 20 21user = User.find(1) 22license = user.licenses.create!(code: 'A1111111', 23 license_category_id: 1, 24 aircraft_category_id: 1, 25 date_of_issue: Date.today - 3.years) 26license.reccurent_histories.create!(date: license.date_of_issue, valid_for: 2) 27 28user = User.find(1) 29license = user.licenses.create!(code: 'A2222222', 30 license_category_id: 2, 31 aircraft_category_id: 1, 32 date_of_issue: Date.today - 3.years) 33license.reccurent_histories.create!(date: license.date_of_issue, valid_for: 2) 34 35LicenseCategory.create!(name: '自家用操縦士') 36LicenseCategory.create!(name: '事業用操縦士') 37LicenseCategory.create!(name: '準定期運送用操縦士') 38LicenseCategory.create!(name: '定期運送用操縦士') 39 40AircraftCategory.create!(name: '上級滑空機') 41AircraftCategory.create!(name: '飛行機') 42 43# 追加のユーザーをまとめて生成する 44ActionMailer::Base.perform_deliveries = false 45m = 0 4649.times do |n| <= 46行目 47 name = Faker::Name.name 48 email = "example-#{n + 1}@railstutorial.org" 49 password = "password" 50 user = User.create!(name: name, 51 email: email, 52 introduction: "ここはユーザーのプロフィール文です。入力可能な文字数は160字にする予定です。ここはユーザーのプロフィール文です。入力可能な文字数は160字にする予定です。ここはユーザーのプロフィール文です。入力可能な文字数は160字にする予定です。ここはユーザーのプロフィール文です。入力可能な文字数は160字にする予定です。", 53 location: "東京", 54 password: password, 55 password_confirmation: password) 56 if (2 * n + 1) % 3 == 0 57 m += 1 58 user.avatar.attach(io: File.open(Rails.root.join("app/assets/images/test/user_test_avatar/user_test_avatar_#{m + 1}.png")), filename: "user_test_avatar_#{m + 1}.png") 59 user.user_cover.attach(io: File.open(Rails.root.join("app/assets/images/test/user_test_cover/user_test_cover_#{m + 1}.jpg")), filename: "user_test_cover_#{m + 1}.jpg") <= 59行目 60 else 61 user.avatar.attach(io: File.open(Rails.root.join('app/assets/images/default_avatar.png')), filename: 'default_avatar.png') 62 user.user_cover.attach(io: File.open(Rails.root.join('app/assets/images/default_cover.png')), filename: 'default_cover.png') 63 end 64end 65 66# ユーザーの一部を対象にマイクロポストを生成する 67users = User.order(:created_at).take(6) 6850.times do |n| 69 content = Faker::Lorem.sentence(word_count: 5) 70 users.each do |user| 71 user.microposts.create!(content: content, is_flight_attached: false, is_sharing_micropost: false, created_at: Time.zone.now - n.minutes, 72 updated_at: Time.zone.now - n.minutes) 73 end 74end 75 76# 以下のリレーションシップを作成する 77users = User.all 78user = users.first 79following = users[2..50] 80followers = users[3..40] 81following.each { |followed| user.follow(followed) } 82followers.each { |follower| follower.follow(user) } 83 84user = User.find_by(email: "example@railstutorial.org") 85date = Date.today - 3.year 86user.create_glider_initial_log(at_present: date, 87 total_time: 67_680, 88 total_number: 188, 89 pic_winch_time: 7_560, 90(略) 91group = Group.find(1) 92date = Date.new(2022, 2, 21) 93takeoff_time = Time.zone.local(2022, 2, 21, 21, 20, 0) 94group.glider_group_flights.create(day_flight_number: nil, 95 date: date, 96 departure_point: '宝珠花滑空場', 97 arrival_point: '宝珠花滑空場', 98 is_winch: true, 99 fleet: 1, 100 front_seat: 39, 101 front_flight_role: '同乗教育', 102 rear_seat: 1, 103 rear_flight_role: '教官', 104 takeoff_time: takeoff_time, 105 release_time: takeoff_time + 1.minute, 106 landing_time: takeoff_time + 12.minutes, 107 release_alt: 400, 108 creator: 1, 109 note: '備考欄です')

database.yml

yml

1default: &default 2 adapter: mysql2 3 encoding: utf8mb4 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: root 6 password: <%= ENV['DATABASE_PASSWORD'] %> 7 host: <%= ENV.fetch("MYSQL_DATABASE_HOST") { 'db' } %> # Docker用 8 socket: /tmp/mysql.sock 9development: 10 <<: *default 11 database: myapp_development 12test: 13 <<: *default 14 database: myapp_test 15production: 16 <<: *default 17 database: myapp_database 18 username: <%= Rails.application.credentials.db[:user_name] %> 19 password: <%= Rails.application.credentials.db[:password] %> 20 host: <%= Rails.application.credentials.db[:endpoint] %> 21 port: 3306

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

自己解決

database.ymlのproduction設定で、database名をAWSのRDSコンソールの"DB 識別子"と同一のものに修正したところ、正常に動作しました。

yml

1# 誤 2default: &default 3 adapter: mysql2 4... 5production: 6 <<: *default 7 database: myapp_database 8 username: <%= Rails.application.credentials.db[:user_name] %> 9 password: <%= Rails.application.credentials.db[:password] %> 10 host: <%= Rails.application.credentials.db[:endpoint] %> 11 port: 3306 12 13# 正 14default: &default 15 adapter: mysql2 16... 17production: 18 <<: *default 19 database: myapp <=修正 20 username: <%= Rails.application.credentials.db[:user_name] %> 21 password: <%= Rails.application.credentials.db[:password] %> 22 host: <%= Rails.application.credentials.db[:endpoint] %> 23 port: 3306

投稿2022/06/11 11:38

hajsu00

総合スコア151

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです