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

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

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

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

MySQL

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

2回答

714閲覧

データベースに保存された書籍名を表示する、booklist2という名前のアプリをmysql2を使って起動させようとしたら、エラーが出てしまったため、そのエラーの解決方法を教えていただけますでしょうか。

Marchan4

総合スコア15

Ruby

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

MySQL

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2021/04/03 09:21

編集2021/04/06 04:42

使用環境はrubyバージョン3.0.0, bundlerバージョン2.2.3, homebrewバージョン3.0.10, mysqlバージョン5.7, mysql2バージョン0.5.3です。
使用機器macOS Big Sur バージョン11.2.2です。使用中のテキストエディタはAtomです。

下記がrubyバージョン3.0.0がインストールされた証拠です。

$ ruby -v ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-dar win17]
$ rbenv versions system 2.4.0 2.5.7 * 3.0.0 (set by /Users/ユーザ名/Downloads/プログ ミング関連/booklist2/.ruby-version)

下記がbundlerバージョン2.2.3がインストールされた証拠です。

$ bundler -v Bundler version 2.2.3

下記がhomebrewバージョン3.0.10がインストールされた証拠です。

$ brew -v Homebrew 3.0.10 Homebrew/homebrew-core (git revision 032bac46a4; last commit 2021-03-31) Homebrew/homebrew-cask (git revision 373bc16837; last commit 2021-03-31)

下記がmysqlバージョン5.7がインストールされた証拠です。

$ mysql --version mysql Ver 14.14 Distrib 5.7.32, for osx10.16 (x86_64) using EditLine wrapper

下記がmysql2バージョン0.5.3がインストールされた証拠です。

$ bundle exec irb - r mysql2 irb(main):001:0> Mysql2::VERSION => "0.5.3" irb(main):002:0> exit;
$ bundle exec ruby -e "require 'mysql2'; puts Mysql2::VERSION" 0.5.3

フォルダ内容は以下の通りです。

booklist2 └bundle └config └vendor └bundle └views └booklist2.erb └.ruby-version └app.rb └create_table_booklist2.sql └Gemfile └Gemfile.lock

下記が、booklist2という名前のアプリをmysql2を使って起動させようとした時に出たエラーです。

![イメージ説明

まず、Mysql2::Error::ConnectionError at /
Access denied for user 'root'@'localhost' (using password: NO)
というエラーが
「パスワードがないためroot@localhostユーザにアクセスできない」という意味だと思ったのですが、

私が実際にMySQLのログインパスワードを設定してるため、mysql2もMySQLと同じログインパスワードを設定した方がいいとこのエラーは言っておるのでしょうか。

下記がbooklist2/app.rbのソースコードです。

booklist2/app.rb

require 'sinatra' require 'mysql2' get '/' do client = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'booklist2', encoding: 'utf8') @records = client.query("SELECT * FROM books ORDER BY created_at DESC") erb :booklist2 end post '/' do client = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'booklist2', encoding: 'utf8') # 書籍タイトルの保存 book_title = params['book_title'] statement = client.prepare('INSERT INTO books (book_title) VALUES(?)') statement.execute(book_title) # 書籍タイトルの一覧取得 @records = client.query("SELECT * FROM books ORDER BY created_at DESC") erb :booklist2 end

上記のソースコードの5行目(下記の一文のソースコード)が

client = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'booklist2', encoding: 'utf8')

エラーの原因なのですが、この一文のソースコードが間違ってるということなのでしょうか。

下記がviews/booklist2のソースコードです。

views/booklist2

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Booklist2</title> </head> <body> <%# フォームデータ送受信確認用コード(本番では削除) %> <div style="background-color: skyblue;"> <p>動作確認用: <%= params %></p> </div> <a href="/"><h1>Booklist2</h1></a> <h2>書籍の登録フォーム</h2> <form action="/" method="POST"> <input type="text" name="book_title" placeholder="書籍タイトルを入力" required> <input type="submit" name="submit_add_book" value="登録"> </form> <h2>登録された書籍一覧</h2> <ul> <% @records.each do |record| %> <li><%= ERB::Util.html_escape(record['book_title']) %></li> <% end %> </ul> </body> </html>

あと、下記がcreate_table_booklist2.sqlです。

CREATE TABLE booklist2.books ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, book_title VARCHAR(100), created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP );

あと、下記がデータベースbooklist2のbooksテーブルです。

mysql> SELECT * FROM booklist2.books; +----+-----------------------------------------------------------+---------------------+ | id | book_title | created_at | +----+-----------------------------------------------------------+---------------------+ | 1 | 非エンジニアのためのプログラミング講座 | 2021-03-31 14:53:34 | | 2 | プログラミングRuby | 2021-03-31 14:54:48 | | 3 | 入門HTML5 | 2021-03-31 14:57:07 | +----+-----------------------------------------------------------+---------------------+ 3 rows in set (0.15 sec)

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

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

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

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

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

guest

回答2

0

Qiita の方で解決したようです。

[Q&A] データベースに保存された書籍名を表示する、booklist2という名前のアプリをmysql2を使って起動させようとしたら、エラーが出てしまったため、そのエラーの解決方法を教えていただけますでしょうか。 - Qiita
https://qiita.com/Marchan4/questions/3800f27b88217e47f913

投稿2021/04/07 20:33

sonota88

総合スコア43

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

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

0

私が実際にMySQLのログインパスワードを設定してるため、mysql2もMySQLと同じログインパスワードを設定した方がいいとこのエラーは言っておるのでしょうか。

エラーの原因なのですが、この一文のソースコードが間違ってるということなのでしょうか。

確かに
client = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'booklist2', encoding: 'utf8')

パスワードは引数に指定されてませんね。
「設定したほうがいい」のではなく「指定して呼び出さないと認証できない」と認識されたほうが良いかと思います。

投稿2021/04/03 09:27

m.ts10806

総合スコア80857

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問