目的:Sinatraで作成した掲示板を改良する。書き込みデータの管理にMongoDBを使用する。
実施環境:
OS:Windows8.1
Ruby:v2.2.2
Sinatra:v1.4.6
Haml:v4.0.6
mongo(gems):v2.0.4
MongoDB:mongodb-win32-x86_64-2008plus-ssl-3.0.3-signed
ディレクトリ構造:
作業ディレクトリ
|-sinatra_start.rb(rubyファイル)
|
|-views(ディレクトリ)
| |-index.haml(hamlファイル)
|
|-db
|-MongoDBによって作成されるファイル複数
目次:
- 概要
- Ruby(Sinatra)のソースコード修正
- Hamlのソースコード修正
- 説明
- 実行
掲示板のプログラムや説明に関しては、
以前記事を書いているので、そちらを参考にして頂ければ分かりやすいと思います。
以前記事を書いているので、そちらを参考にして頂ければ分かりやすいと思います。
また、ソースコードも以前の記事にあるものを修正したものになります。
Sinatraで掲示板を作ってみた!!
また、MongoDBの起動方法等については、
以下の記事を参考にして頂ければ分かりやすいと思います。
MongoDBを使ってみる。
Sinatraで掲示板を作ってみた!!
また、MongoDBの起動方法等については、
以下の記事を参考にして頂ければ分かりやすいと思います。
MongoDBを使ってみる。
1.概要
1.1
以前、Sinatraで作成した掲示板。
書き込みデータの管理はCSVで行っていた。
その部分をMongoDBに書き換える。
以下の点に注意
- DBのソースコード部分はべた書きである
- Modelクラスの作成はない
- Validationによる入力データの検証は行っていない
2.Ruby(Sinatra)のソースコード修正
2.1
Ruby(Sinatra)側のソースコードは以下の通り修正した。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# encoding: utf-8 | |
# File Name: sinatra_start.rb | |
# Create Day is 2015/05/20 | |
# Last Update Day is 2015/05/27 | |
# Gem List | |
gem 'tilt', '1.4.1' | |
# Require List | |
require 'sinatra' | |
# sinatra reloader is classic type | |
require 'sinatra/reloader' if development? | |
require 'haml' | |
require 'tilt' | |
require 'mongo' | |
# 外部エンコーディングを変更 | |
Encoding.default_external = "UTF-8" | |
get '/' do | |
db = Mongo::Client.new(["127.0.0.1:27017"], :database => 'sinatra_bbs') | |
@title = "Welcom to Sinatra BBS!!" | |
@comments_data = db[:comments].find | |
haml :index | |
end | |
put '/write_comment' do | |
db = Mongo::Client.new(["127.0.0.1:27017"], :database => 'sinatra_bbs') | |
db[:comments].insert_one({ | |
:name => params[:name], | |
:title => params[:title], | |
:comment => params[:message] | |
}) | |
redirect '/' | |
end |
3.Hamlのソースコード修正
3.1
Haml側のソースコードは以下の通り修正した。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
!!! | |
%html{:lang => "ja"} | |
%head | |
%title= @title | |
%meta{:content => "text/html", :"http-equiv" => "Content-Type", :charset => "utf-8"} | |
%body | |
%h1 #{@title} | |
%h2 Comment Write | |
%form{:method => "POST", :action => '/write_comment'} | |
%input{:type => "hidden", :name => "_method", :value => "PUT"} | |
%table | |
%tr | |
%td Your Name | |
%td | |
%input{:type => "text", :name => "name"} | |
%tr | |
%td Title | |
%td | |
%input{:type => "text", :name => "title"} | |
%tr | |
%td Comment | |
%td | |
%input{:type => "text", :name => "message"} | |
%tr | |
%td | |
%td | |
%input{:type => "submit", :value => "Comment"} | |
%input{:type => "reset", :value => "Reset"} | |
%h2 Comments List | |
%table{:border => "1", :bordercolor => "#000000"} | |
%tr | |
%th Name | |
%th Title | |
%th Comment | |
- @comments_data.each do |comment| | |
%tr | |
%td= comment[:name] | |
%td= comment[:title] | |
%td= comment[:comment] |
4.説明
4.1
「get '/' do」のデータ取得の修正部分。
CSV.read("db/sinatra_bbs.csv")
の部分を
db[:comments].find
に変更している。
(DBの接続部分もあるが、これだけ)
4.2
「put '/write_comment' do」のコメント書き込みの修正部分。
CSV.open("db/sinatra_bbs.csv", "a") do |csv|
csv << [params[:name], params[:title], params[:message]]
end
の部分を
db[:comments].insert_one({
:name => params[:name],
:title => params[:title],
:comment => params[:message]
})
に変更している。
(DBの接続部分もあるが、これだけ)
5.実行
5.1
以下のコマンドを実行する。
コマンド:ruby sinatra_start.rb
5.2
以下のURLにアクセスする。
(なお、ポートを変更している方は変更したポート番号を指定する)
URL: http://localhost:4567
実行による表示は以前の記事(Sinatraで掲示板を作ってみた!!の実行画像)から変わらない。
プログラム内部でのデータの取得と挿入がDBに変わっているだけである。
(微妙にボーダー入ってるかもですけど、気にしないこと・・・)
以上!!
以下、参考にさせて頂いたサイト様
なし
管理人の独り言
本日、2度目の投稿。
丁度、MongoDBのBSONドキュメントのアクセスまでやったから、ついでに掲示板の方も修正~
そういえば、React.jsが熱いらしいと聞いた。
ただ、小規模ならAngular.js、Vue.jsで十分とも聞くし、どうしたものか・・・
いずれにせよ、使うかどうかともかく情報としては押さえておこうかと思います。
じゃないと自分が使うのに何が良いか検証もできないですし・・・
しっかし、やはりソースコードがインデントで見辛いな、どうにかならないかな・・・
以下、参考にさせて頂いたサイト様
なし
管理人の独り言
本日、2度目の投稿。
丁度、MongoDBのBSONドキュメントのアクセスまでやったから、ついでに掲示板の方も修正~
そういえば、React.jsが熱いらしいと聞いた。
ただ、小規模ならAngular.js、Vue.jsで十分とも聞くし、どうしたものか・・・
いずれにせよ、使うかどうかともかく情報としては押さえておこうかと思います。
じゃないと自分が使うのに何が良いか検証もできないですし・・・
しっかし、やはりソースコードがインデントで見辛いな、どうにかならないかな・・・