前回、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