エラーログを見ると,connection 時に,error になっているようなので,
接続設定周りを見ると良いかと思います.
rails s コマンドを入力してhttp://localhost:3000にアクセスしたらTypeErrorが出たため、相手に自分のmysqlのrootパスワードが知られないように自分のmysqlのrootパスワードを設定して、データベースを作成する方法を教えてください。
rubyのバージョンは3.0.0、 mysqlのバージョンは5.7、 mysql2のバージョンは0.4.10、
bundlerバージョンは2.2.3、 homebrewバージョン3.0.10です。
使用機器macOS Big Sur バージョン11.2.2です。使用中のテキストエディタはAtomです。
tasklistというアプリを作っておる最中なのですが、
rails s コマンドを入力してhttp://localhost:3000
にアクセスしたらTypeErrorが出ました。このエラーの詳細は以下の画像の通りです。
TypeError no implicit conversion of Hash into String
というエラー内容から、
該当する27行目のソースコードを
Hash(ハッシュ)からString(文字列)への暗黙の変換はできないということが分かったため、
config/database.yml
ファイルに
password: <%= ENV['RAILS_DATABASE_PASSWORD'] %>
と設定致した後に、ターミナルに
$ vim .bash_profile
と打ち込んで、enterキーを押して画面が切り替わったら、iキーを押してインサートモードにて
export RAILS_DATABASE_PASSWORD='自分のMySQLのrootパスワード'
を入力し、escキーを押してインサートモードを終了させて、「:wq」と入力して保存して終了させて、ターミナルに
$ source ~/.bash_profile
と入力致しました。その後に、ターミナルに
$ rails db:create
と入力致したところ、下記のエラーが出ました。
$ rails db:create
no implicit conversion of Hash into String
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "pool"=>5, "username"=>"root", "password"=>nil, "socket"=>"/tmp/mysql.sock", "database"=>"tasklist
_development"}
rails aborted!
TypeError: no implicit conversion of Hash into String
ここで何点か質問なのですが、
まず、相手に自分のmysqlのrootパスワードを知られないように自分のmysqlのrootパスワードを設定して、データベース(tasklist_development
、tasklist_test
)を作成する方法を教えていただいてもよろしいでしょうか。
最後に、もしもこのデータベース(tasklist_development
、tasklist_test
)が作成されたら、
TypeError no implicit conversion of Hash into String
というエラーを解決できて、
rails s コマンドを入力してhttp://localhost:3000
にアクセスして、ブラウザ上で以下の画像が表示されるのでしょうか。
2Answer
ちょっとだけ補足させてもらいます。
気にされているエラーは
TypeError no implicit conversion of Hash into String
「ハッシュから文字列への暗黙の変換はできませんよ」という内容です。
そして、エラーが起きているところを確認すると、以下のようになっています。
error.rb:27:in `encode`
error.rb:27:in `new_with_args`
client.rb:89:in `connect`
client.rb:89:in `initialize`
error.rb というのはエラー情報を組み立てているところのようです。
トレースを見ると(呼び出し順は下から上の順番です) client.rb で connect をしようとしたところでエラーが起きて error.rb が呼び出され、その error.rb の中でさらに別のエラーが起きたもののようです(二次災害が起きた感じです)。
なので、気にされている「ハッシュから文字列の変換」は直接的な問題ではなく、MySQL2内部の処理なので、いったん無視して大丈夫です。
もともとのエラーは、ruby から MySQL へ接続しようとしているときに起きています。
そのため、atm-snag さんの言う通りDBの接続回りの設定を見直すのが良いと思います。
- ruby 側の設定で、MySQLのホスト名/IPアドレスは正しいですか?
- MySQLのポート番号は正しいですか?
- 接続するユーザ名が正しいですか?
- 接続ユーザのパスワードは正しいですか?
- そもそも、MySQL は起動していますか?
といった観点で見直すとよいと思います。