前提・実現したいこと
docker環境でrailsアプリの環境構築をしていますが、mysqlでデータベースを作成できず困っています。
下記のqitta記事を参考に現在、"2-5 DB作成"をしています。
https://qiita.com/kodai_0122/items/795438d738386c2c1966
環境変数を用いましたところkeyerrorで環境変数が参照できていないことがわかりました。
発生している問題・エラーメッセージ
KeyError: key not found: "DB_USERNAME"
該当のソースコード
database.yml
default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch('DB_USERNAME') %> password: <%= ENV.fetch('DB_ROOT_PASSWORD') %> host: db development: <<: *default database: okonomiyakidb_development test: <<: *default database: okonomiyakidb_test production: <<: *default database: okonomiyakidb_production username: okonomiyakidb password: <%= ENV['OKONOMIYAKIDB_DATABASE_PASSWORD'] %>
docker-compose.yml
version: '3' volumes: mysql_data: vendor_bundle: services: db: image: "mysql" ports: - "3307:3306" volumes: - "./tmp/db:/var/lib/mysql" environment: MYSQL_ROOT_PASSWORD: <%= ENV.fetch('DB_ROOT_PASSWORD') %> MYSQL_DATABASE: okonomiyaki_db MYSQL_HOST: <%= ENV.fetch('DB_HOST') %> web: build: . tty: true depends_on: - db command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/okonomiyakidb ports: - "3000:3000"
.enb
DB_USERNAME=mysqlにログインして確認したuser名 DB_ROOT_PASSWORD=mysqlにログインして確認したpass DB_HOST=db
試したこと
①.enbはworkingdirectory以下にあります(rails newで生成するappディレクトリの上の階層)。環境変数の使い方を調べてみましたが、他に必要な記述などは見つかりませんでした。
②環境変数を使わずに(.enbの内容をべたうち)docker-compose run web rake db:createをしてみますとconnectionerrorが出てしまいます。
Mysql2::Error::ConnectionError: Access denied for user 'root'@'192.168.112.4' (using password: YES)
mysql -uユーザ名 -pパスワード としてユーザ名とパスワードを確認しましたが正しいようです。mysqlに問題なくログインできました。
mysqlコンテナと、webコンテナ2つが起動した状態でした(logにerrorなし)。
mysqlはrootユーザのみ作成してあり、passwordも設定してあります。
補足情報(FW/ツールのバージョンなど)
Server version: 8.0.26 MySQL
MacBook Pro (13-inch, 2020, Two Thunderbolt 3 ports)
他に必要なコード等あればご指摘ください。docker環境構築は初めてでrailsも半年程度です。
半日調べ続けて見つからない状況です。お忙しい中申し訳ありませんがどなたかご教授いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー