Ubuntu16でsinatraとactiverecordとMysqlを使ってみる

前回、Ubuntu16に、sinatraをインストールしたので
Mysqlを組み込んでみる

手順は以下となる
1,Mysql のインストール
2.操作用アカウントの作成
3.操作用テーブルの作成
4.操作用項目の作成
5.Mysql2とactiverecodのインストール
6.databese.ymlを作成
7.app.rbを修正
8.起動し動作確認

となります

1,Mysql のインストール

sudo apt-get install mysql-server

途中で、rootのパスワード名を聞かれるので
パスワードを入力し、TABで「了解」まで移動し、スペースで先へ進む(2回入力)

インストール確認

mysql --version

mysql Ver 14.14 Distrib 5.7.12, for Linux (x86_64) using EditLine wrapper

でした。

2.操作用アカウントの作成

ユーザ:user01
pass:pass01
で、作成する

GRANT ALL PRIVILEGES ON *.* TO (ユーザ名)@localhost IDENTIFIED BY ‘(パスワード)’ WITH GRANT OPTION;
なので、以下にて作成
まず、先ほど、インストールの時に設定したパスワードにて
rootでログインする

mysql -u root -p

rootのパスワードを入力

GRANT ALL PRIVILEGES ON *.* TO user01@localhost IDENTIFIED BY 'pass01' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

ログインできるか確認する

mysql -u user01 -p

新しいアカウントのパスワードpass01で確認
ログインできらた

exit;

で、終了

3.操作用テーブルの作成

データベース名
sinatra

テーブル名
users

項目名
username(名前)
mailaddres(メールアドレス)

を作成する

作業用アカウントでログイン

mysql -u user01 -p

データベースを作成

CREATE DATABASE sinatra;

データベースの確認

show databases;

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sinatra |
| sys |
+——————–+
5 rows in set (0.01 sec)

データベースの選択

use sinatra;

テーブルの作成

CREATE TABLE <code>users</code> (
  <code>id</code> int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  <code>username</code> varchar(255) NOT NULL,
  <code>mailaddres</code> varchar(255) NOT NULL,
  <code>created_at</code> datetime NOT NULL,
  <code>updated_at</code> datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

テーブルの確認

desc users;

mysql> desc users;
+————-+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————-+————–+——+—–+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | | NULL | |
| mailaddres | varchar(255) | NO | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+————-+————–+——+—–+———+—————-+
5 rows in set (0.01 sec)

4.操作用項目の作成
確認用のデータを作成する
名前: アドレス
‘tanaka’,’t01@gmail.com’
‘satou’,’s01@gmail.com’
‘yamada’,’y01@gmail.com’
の3つの項目を追加してみる

insert into users (id, username, mailaddres,created_at,updated_at) values(1,'tanaka','t01@gmail.com',now(),now());
insert into users (id, username, mailaddres,created_at,updated_at) values(2,'satou','s01@gmail.com',now(),now());
insert into users (id, username, mailaddres,created_at,updated_at) values(3,'yamada','y01@gmail.com',now(),now());

入力したデータを確認する

select id, username, mailaddres from users;

mysql> select id, username, mailaddres from users;
+—-+———-+—————+
| id | username | mailaddres |
+—-+———-+—————+
| 1 | tanaka | t01@gmail.com |
| 2 | satou | s01@gmail.com |
| 3 | yamada | y01@gmail.com |
+—-+———-+—————+
3 rows in set (0.00 sec)

exit;

5.mysql2とactiverecodをインストールする
前回作成した
sina/Gemfile
gem “activerecord”
gem “mysql2”
を追加する
viまたは、gedit
にて修正する

cd
cd sina
vi Gemfile

以下となる

# frozen_string_literal: true
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"
gem 'sinatra'
gem "activerecord"
gem "mysql2"

bundleにて、
“activerecord”
“mysql2”
を、
インストール

cd
cd sina
bundle install --path vendor/bundle

エラーが出たので

rbenv: bundle: command not found

The `bundle' command exists in these Ruby versions:
  2.2.5

指定し

rbenv shell 2.2.5

再度

cd
cd sina
bundle install --path vendor/bundle

bundleは起動できたが、エラーが出た
下記メッセージに従い

:
mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.
:

libmysqlclient-devをインストール

sudo apt-get install libmysqlclient-dev

再度

bundle install --path vendor/bundle

6.databese.ymlを作成

touch database.yml

geditなどでデータ追加

development:
  adapter: mysql2
  database: sinatra
  host: localhost
  username: user01
  password: pass01
  encoding: utf8

7.app.rbを修正

#coding: utf-8

require 'active_record'
require 'mysql2'
require 'sinatra'

# Import files for database
ActiveRecord::Base.configurations = YAML.load_file('database.yml')
ActiveRecord::Base.establish_connection(:development)

class User < ActiveRecord::Base
end

get '/' do
@usrs = User.all
erb %{
<html>
<head>
  <meta charset="utf-8" />
  <title>Test</title>
</head>
<body>
  <table border>
    <tr>
      <th>名前</th>
      <th>メールアドレス</th>
    </tr>
    <% @usrs.each do |us| %>
    <tr>
      <td><%= us.id %></td>
      <td><%= us.username %></td>
      <td><%= us.mailaddres %></td>
    </tr>
    <% end %>
</table>
</body>
</html>
}
end

8.起動し動作確認
実行

bundle exec ruby app.rb

ブラウザ(Firfox)から

http://localhost:4567/

へアクセスし、
名前の一覧がでれば完了です

参考:
・UbuntuにMySQLをインストールするところからテーブル作成までの方法
・Sinatra+MySQL+ActiveRecordでDatabaseの設定を行う
・Sinatra+ActiveRecord+SQLite3で,軽量なWeb-DB連携例
・小規模Webアプリのためのフレームワーク,Sinatra