月別アーカイブ: 2016年5月

Ubuntu16でsinatraで、削除の機能を追加

項目の削除の機能を追加する

手順は

1,削除を行う行を指定する釦を設置する
2,削除を行う処理を追加する
3,動作を確認する

となります

1,削除を行う行を指定する釦を設置する
各行に釦を設置し、行を指定するIDを埋め込む
app.rb
に、釦のフォームを設置する

<form method="post" action="del">
 <td><input type="submit" value="削除"></td>
  <input type="hidden" name="id" value="<%= us.id %>">
  <input type="hidden" name="_method" value="delete">
 </form>

get ‘/’ do
を以下にする

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>
 <form method="post" action="del">
 <td><input type="submit" value="削除"></td>
  <input type="hidden" name="id" value="<%= us.id %>">
  <input type="hidden" name="_method" value="delete">
 </form>
    </tr>
 <% end %>
<form method="post" action="new">
 <tr>
  <td><input type="submit" value="登録"></td>
  <td><input type="text" name="username"></td>
  <td><input type="text" name="mailaddres"></td>
 </tr>
</form>
</table>
</body>
</html>
}
end

で、起動し削除釦を押してみる

cd
cd sina
rbenv shell 2.2.5
bundle exec ruby app.rb

ブラウザ(Firfox)から
http://localhost:4567/

エラーとして

Try this:
delete '/del' do
  "Hello World"
end

と、表示される
delete ‘/del’ do
を追加する
2,削除を行う処理を追加する

delete '/del' do
  usrs = User.find(params[:id])
  usrs.destroy
  redirect '/'
end

修正内容を追加すると

#coding: utf-8
 
require 'active_record'
require 'mysql2'
require 'sinatra'
require 'sinatra/reloader'
 
# 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>
      <form method="post" action="del">
      <td><input type="submit" value="削除"></td>
       <input type="hidden" name="id" value="<%= us.id %>">
       <input type="hidden" name="_method" value="delete">
       </form>
    </tr>    
</tr>
    <% end %>
<form method="post" action="new">
 <tr>
  <td></td>
  <td><input type="text" name="username"></td>
  <td><input type="text" name="mailaddres"></td>
  <td><input type="submit" value="登録"></td>
 </tr>
</form>
</table>
</body>
</html>
}
end

post '/new' do
  usr = User.new
  usr.username = params[:username]
  usr.mailaddres = params[:mailaddres]
  usr.save
  redirect '/'
end

delete '/del' do
  usrs = User.find(params[:id])
  usrs.destroy
  redirect '/'
end

となりる

3,動作を確認する
app.rbを起動し

cd
cd sina
rbenv shell 2.2.5
bundle exec ruby app.rb

ブラウザ(Firfox)から
http://localhost:4567/
により、削除釦を押してみる

対象項目の削除ができた

参考
・Sinatra+ActiveRecord+SQLite3で,軽量なWeb-DB連携例

Ubuntu16でsinatraで、追加の機能を追加

前回のプログラムに

追加の機能を追加する
手順は

1,自動リロードの追加
2,追加項目入力用フォームの追加
3,テータ追加処理の追加
となりる

1,自動リロードの追加
開発効率向上のために自動リロードの追加する

sinatra-contrib
の追加(インストール)と

app.rbへの

require 'sinatra/reloader'

の追加となる

sina/Gemfile

gem 'sinatra-contrib'

を追加し
bundleにて、インストール

cd
cd sina
rbenv shell 2.2.5
bundle install --path vendor/bundle

app.rbを修正

require 'sinatra/reloader'

を追加

実行
bundle exec ruby app.rb
ブラウザ(Firfox)から
http://localhost:4567/

ブラウザ、起動後
app.rb
を修正し、ブラウザ、再表示で、変更されることを確認

2,追加項目入力用フォームの追加
追加のフォームを追加する


追加したものは

#coding: utf-8
 
require 'active_record'
require 'mysql2'
require 'sinatra'
require 'sinatra/reloader'
 
# 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 %>
<form method="post" action="new">
 <tr>
  <td><input type="submit" value="登録"></td>
  <td><input type="text" name="username"></td>
  <td><input type="text" name="mailaddres"></td>
 </tr>
</form>
</table>
</body>
</html>
}
end

再表示して、変更を確認する

登録ボタンを押して見る

エラー画面になる
データの追加処理
post ‘/new’
を、追加する

3,テータ追加処理の追加
app.rb
に、

post '/new' do
  usr = User.new
  usr.username = params[:username]
  usr.mailaddres = params[:mailaddres]
  usr.save
  redirect '/'
end

を追加

行が追加されることを確認してみる

Mysql2::Error: Field 'created_at' doesn't have a default value: INSERT INTO <code>users</code> (<code>username</code>, <code>mailaddres</code>, <code>updated_at</code>) VALUES ('kon', 'kon@xxx.com', '2016-05-09 05:11:22')

エラーになる
updated_atは作ってくれるが
created_atは作ってくれないようである

DB側で、自動で、作成するように変更

ALTER TABLE users CHANGE created_at created_at datetime NOT NULL default current_timestamp;

mysqlのバージョンによる依存性の可能性があるため、確認

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

5.7.12
の場合、うまく行った

参考
・【Ruby】Sinatraで、速攻でWebサイトを公開するための環境構築
・Sinatra+ActiveRecord+SQLite3で,軽量なWeb-DB連携例
・MySQL5.6で作成日時と更新日時を自動で設定してみるAdd Star

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

Ubuntu16でRubyを使ってみる

せっかくの新しい、Ubuntu16の環境なので
Rubyの勉強に使ってみる
VirtualBoxで作成した環境に、
Rubyをインストールし
Webサービス(Sinatra,Rails)を試してみる

手順は以下
1,Git のインストール
2.rbenv のインストール
3.ruby-build のインストール
4.ruby のインストール
5.bundler のインストール
6.sinatra のインストール
7.サンプルAPの作成
8.実行確認
となります

1.Git のインストール

sudo apt-get update
sudo apt-get install git

2.rbenv のインストール

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

echo 'export PATH="$HOME/.rbenv/bin:$PATH"'>> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc

シェルを再起動

source ~/.bashrc

インストールの確認

type rbenv


「rbenv は関数です」と表示されればインストール完了

3.ruby-build のインストール

mkdir ~/.rbenv/plugins

cd ~/.rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git

4.ruby のインストール
インストール可能な、最新バージョンを確認

rbenv install -l

2.2.5をインストール

rbenv install 2.2.5

エラーになった

:
Try running <code>apt-get install -y libssl-dev libreadline-dev zlib1g-dev

とのことなので、

sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev

の、のち、再度

rbenv install 2.2.5

を、行う

インストールされたRubyのバージョンを確認

ruby -v

5.bundler のインストール

gem install bundler

エラーになったので

gem install bundler
rbenv: gem: command not found

The </code>gem' command exists in these Ruby versions:
  2.2.5

設定後

rbenv shell 2.2.5

再度

gem install bundler

6.sinatra のインストール

プロジェクト用エリア(フォルダ:sina)を作成

cd
mkdir sina
cd sina

Gemfileを作成

bundle init

Gemfileにgem ‘sinatra’を追加

source "https://rubygems.org"
gem 'sinatra'

# gemを入れるディレクトリを作成

mkdir vendor
mkdir vendor/bundle

bundle で、Gemfileを実行

bundle install --path vendor/bundle

7.サンプルAPの作成
app.rbを作成

#coding: utf-8
require 'sinatra'
get '/' do
"Hello World"
end

8.実行確認
実行

bundle exec ruby app.rb

ブラウザ(Firfox)から
http://localhost:4567/
へアクセスし、
Hello World
と表示されば、完了です

下記のページを参考にしました
・Ruby on Rails 4.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました

・Ubuntu:Ruby と Ruby on Rails のインストール手順

・【Ruby】Sinatraで、速攻でWebサイトを公開するための環境構築

・Ubuntu、Sinatra、インストール方法、ベンチマーク

Ubutu14で、Ubuntu16の環境を作る

Ubuntu16を試してみるために
Ubuntu14の環境でVirtualBoxで動作確認をしてみる

まず、Ubuntu14にVirtualBoxをインストールする

を参考にし、
https://www.virtualbox.org/wiki/Linux_Downloads
から、ダウンロードをする
Ubuntu 14.04 (“Trusty”) / 14.10 (“Utopic”) / 15.04 (“Vivid”) i386 | AMD64

インスツールするOSが、i386 | AMD64
か調べる必要がある

を、参考に
# uname -a
で、調べると、
Linux ubuntu 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
自分のOSはx86_64
なので、64Bit AMD64をダウンロード

VirtualBox 5.0.20 for Linux
(2016/5/8)バージョンは5.0.20のようです
ダウンロードした
virtualbox-5.0_5.0.20-106931-Ubuntu-trusty_amd64.deb
を、ダブルクリックでインストール完了

次に、Ubuntu16のディスクイメージをダウンロード
https://www.ubuntulinux.jp/News/ubuntu1604-ja-remix

ubuntu-ja-16.04-desktop-amd64.iso(ISOイメージ) (md5sum: 76a02f16f56c01f96aeda325914432fd)
から、ダウンロード

VirtalBoxの新規作成か
名前をUbuntu16
タイプ:Linux
バージョン:Ubuntu(64Bit)
次へ
メモリを設定(5120)
次へ
仮想ハードディスを作成する
VDIを選択
次へ
可変サイズ
次へ
20G
作成

設定にて
ストレージ
コントローラを選択
左を選択し
ダウンロードした(ISOイメージ)を選択

起動を選択する
日本語が選択していることを確認し
Ubuntu16インストールを選択

2つのチェックを入れる
続ける
インストールを押す

Tokyで
続ける
キーボード
日本語で
続ける

インストールが完了しました
がでたら、今すぐ起動を押す
電源をオフにして
再度起動する

Ubuntu16が起動できる

tirm
gedit
を、サイドメニューに追加

virtualbox コピー ペーストできるようにする

VirtualBoxでOS間のクリップボードを共有する方法

設定から
一般>高度>
 クリップボードの共有>双方向

再起動したがうまく行かない

http://vboxmania.net/content/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AE%E5%85%B1%E6%9C%89%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%A7%E3%81%99

>Guet Additions にて追加される機能です
Guet Additionsをインストールしないと行けない

VBoxGuestAdditions.isoが、入っているか探してみる
sudo find / -name VBoxGuestAdditions.iso

/usr/share/virtualbox/VBoxGuestAdditions.iso
にあった

設定で、VBoxGuestAdditions.isoをCDに追加して
起動するが、CDで起動していまいうまくいかない
起動の順番を
設定>システムにより
HDDからDVDの順番にする

再度、起動した後の

Terminal
から
cd /media/ubuntu/VBOXADDITIONS_5.0.20_106931/
sudo /bin/sh VBoxLinuxAdditions.run
にて、VBoxLinuxAdditionsをゲスト側にインストール

インストール後
一度、仮想を終了し、再度起動すると

ホストからゲストへのコピペができた