LoginSignup
Marchan4
@Marchan4 (Marchan4)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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が出ました。このエラーの詳細は以下の画像の通りです。

Action Controller_ Exception caught_page-0001(一部モザイクあり).jpg


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_developmenttasklist_test)を作成する方法を教えていただいてもよろしいでしょうか。

最後に、もしもこのデータベース(tasklist_developmenttasklist_test)が作成されたら、

TypeError no implicit conversion of Hash into String

というエラーを解決できて、

rails s コマンドを入力してhttp://localhost:3000にアクセスして、ブラウザ上で以下の画像が表示されるのでしょうか。

“Yay! You’re on Rails!” .png

0

2Answer

エラーログを見ると,connection 時に,error になっているようなので,
接続設定周りを見ると良いかと思います.

0

ちょっとだけ補足させてもらいます。

気にされているエラーは

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 は起動していますか?

といった観点で見直すとよいと思います。

0

Your answer might help someone💌