使用環境はrubyバージョン3.0.0, mysqlバージョン5.7, mysql2バージョン0.5.3, bundlerバージョン2.2.3です。
使用機器macOS Big Sur バージョン11.2.2です。使用中のテキストエディタはAtomです。
mysql2バージョン0.5.3がインストールされた時のメッセージが以下の通りです。
$ sudo gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl@1.1/in clude --with-ldflags=-L/usr/local/opt/openssl@1.1/lib Password: Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl@1.1/include --with-ldflags=-L/usr/local/opt/openssl@1.1/lib' This could take a while... Successfully installed mysql2-0.5.3 Parsing documentation for mysql2-0.5.3 Done installing documentation for mysql2 after 0 seconds 1 gem installed $ bundle install Using bundler 2.2.3 Using mysql2 0.5.3 Following files may not be writable, so sudo is needed: /Users/ユーザ名/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/build_info /mysql2-0.5.3.info Bundle complete! 1 Gemfile dependency, 2 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed.
今、データベースに保存された書籍の題名データを表示するbooklistというWebアプリケーションを作成させていただいており、肝心なデータベースに保存された書籍の題名データを表示させて頂くことができない上にbookilistというWebアプリケーションが起動しませんでした。
そのbooklistというWebアプリケーションのソースコードが以下の通りです。
booklist/views/booklist.erb
は以下の通りです。
<html lang="ja"> <head> <meta charset="utf-8"> <title>Booklist</title> </head> <body> <%# フォームデータ送受信確認用コード(本番では削除) %> <div style="background-color: skyblue;"> <p>動作確認用: <%= params %></p> </div> <a href="/"><h1>Booklist</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>
booklist/app.rb
は以下の通りです。
require 'sinatra' require 'mysql2' get '/' do client = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'booklist', encoding: 'utf8') @records = client.query("SELECT * FROM books ORDER BY created_at DESC") erb :booklist end post '/' do client = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'booklist', 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 :booklist end
booklist/create_table_booklist.sql
は以下の通りです。
CREATE TABLE booklist.books ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, book_title VARCHAR(100), created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP );
以下がbooklist
データベースのbooks
テーブルのデータ(レコード)です。
mysql> SELECT * FROM books; +----+-----------------------------------------------------------+---------------------+ | id | book_title | created_at | +----+-----------------------------------------------------------+---------------------+ | 1 | 非エンジニアのためのプログラミング講座 | 2021-03-17 14:16:40 | | 2 | プログラミングRuby | 2021-03-17 14:17:30 | | 3 | 入門HTML5 | 2021-03-17 14:18:12 | +----+-----------------------------------------------------------+---------------------+ 3 rows in set (0.01 sec)
あとコメントアウトさせて頂いたソースコードは以下の通りです。
booklist/views/booklist.erb
の19行目から21行目
<%# <% @records.each do |record| %> %> <%# <li><%= ERB::Util.html_escape(record['book_title']) %></li> %> <%# <% end %> %>
上記のソースコードをコメントアウトさせて頂いたら、データベースに保存された書籍の題名データが表示しないもののbooklistというWebアプリケーションが起動しました。
逆に上記のコメントアウトされたソースコードから<%# %>の部分を外させて頂いたらbooklistというWebアプリケーションが起動しない上に、データベースに保存された書籍の題名データが表示されませんでした。