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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

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

Ruby on Rails

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

Q&A

解決済

1回答

1444閲覧

rails s 実行時、database.ymlに記述したMySQLのパスワードが認識されずアクセスエラーとなる

kirimaro

総合スコア8

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

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

Ruby on Rails

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

0グッド

1クリップ

投稿2020/01/12 04:46

前提・実現したいこと

rails で mysql を使用したいのですが、
database.ymlの接続情報defaultにて、
password: <%= ENV["環境変数名"] %>と記述しても、
環境変数名の値が取得できていないようで、
[Error] Access denied for user 'root'@'localhost' (using password: NO)が表示されてしまいます。

発生している問題・エラーメッセージ

Access denied for user 'root'@'localhost' (using password: NO) Extracted source (around line #90): 88 conn_attrs = parse_connect_attrs(opts[:connect_attrs]) 89 90 connect user, pass, host, port, database, socket, flags, conn_attrs 91 end 92 93 def parse_ssl_mode(mode)

該当のソースコード

database.yml

1# MySQL. Versions 5.5.8 and up are supported. 2# 3# Install the MySQL driver 4# gem install mysql2 5# 6# Ensure the MySQL gem is defined in your Gemfile 7# gem 'mysql2' 8# 9# And be sure to use new-style password hashing: 10# https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html 11# 12default: &default 13 adapter: mysql2 14 encoding: utf8 15 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 16 username: root 17 password: <%= ENV["TEST_PASS"] %> 18 host: localhost 19 20development: 21 <<: *default 22 database: test_app_development 23 24# Warning: The database defined as "test" will be erased and 25# re-generated from your development database when you run "rake". 26# Do not set this db to the same as development or production. 27test: 28 <<: *default 29 database: test_app_test 30 31# As with config/credentials.yml, you never want to store sensitive information, 32# like your database password, in your source code. If your source code is 33# ever seen by anyone, they now have access to your database. 34# 35# Instead, provide the password as a unix environment variable when you boot 36# the app. Read https://guides.rubyonrails.org/configuring.html#configuring-a-database 37# for a full rundown on how to provide these environment variables in a 38# production deployment. 39# 40# On Heroku and other platform providers, you may have a full connection URL 41# available as an environment variable. For example: 42# 43# DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" 44# 45# You can use this database configuration with: 46# 47# production: 48# url: <%= ENV['DATABASE_URL'] %> 49# 50production: 51 <<: *default 52 database: test_app_production 53 username: test_app 54 password: <%= ENV['TEST_APP_DATABASE_PASSWORD'] %> 55

試したこと

database.ymlのpassword: に直接パスワードを入力した場合は、
エラーが発生せずにデータベースにアクセスできることも確認しております。

GitBash上でENVコマンドを実行して指定の環境変数が正しく設定されているか確認しましたが、
指定の環境変数は設定されており、指定した値もMySQLサーバーのパスワードと一致している事を確認済みです。

補足情報(FW/ツールのバージョンなど)

ruby 2.6.5p114 (2019-10-01 revision 67812) [x64-mingw32]
Rails 6.0.2.1
MySQL Server 8.0.18

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2020/01/12 08:35

GitBash上でENVコマンドを実行 して確認したその状態で rails s してみたらどうなりますか?
kirimaro

2020/01/12 09:53

回答ありがとうございます!起動しました! 回答の結果から.bash_profileの読み込みに問題がある事に気づき調べましたところ、 盛大な勘違いによるエラーだったことが判りました… ▼勘違いしていたポイント source ~/.bash_profileを実行した際、 起動しているすべてのgitbashでbash_profileが更新されると思っていた…。 質問時、gitbash上からsource ~/.bash_profileを指定して、 且つENVコマンドから環境変数が登録されている事を確認していたのですが、 rails sを実行したのは、分割して開いていたもう一つのgitbashターミナル(.bash_profileが反映されていないgitbash)の方でした…
guest

回答1

0

自己解決

winterboum様の回答をきっかけに解決方法を見つけられましたので、解決方法を記載しておきます。
(※おそらく初心者の方は、同じ勘違いをするかもしれません…)

▼今回エラーの発生原因となった勘違いポイント

gitbashを複数起動している場合に、
いずれかのgitbashターミナルから「source ~/.bash_profile」を実行した際、
起動しているすべてのgitbashターミナルで.bash_profileが更新されると思っていたこと。

実際には、「source ~/.bash_profile」を実行したターミナルでのみ
.bash_profileが更新され、そのほかのターミナルでは更新されていない。

※gitbashを複数起動した状態で、いずれかのgitbashで「source ~/.bash_profile」を実行します。
その後、sourceコマンドを実行したgitbashと、実行していないgitbashとで、
それぞれENVコマンドを実行し、その出力結果を比較してみるとわかります。

▼解決策

解決策については、2種類あったので両方とも記載

  1. 解決策①

gitbashを複数起動している場合は、すべてのgitbashで、
「source ~/.bash_profile」を行う

  1. 解決策②

gitbashをログインシェルに設定し、
gitbashターミナル起動時に、自動的に.bash_profileを読み込むようにしておく。

※VSCodeでgitbashをログインシェルに設定する方法については、下記記事が参考になりました。
リンク内容

投稿2020/01/12 10:06

kirimaro

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問