使用環境は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)