使用Sinatra和Redis启动项目(在MAC上)
我决定尝试制作一个经典的网页聊天工具。
安装 Sinatra 和 Redis。
使用Gem和Brew进行安装。
gem install sinatra sinatra-contrib redis hiredis --no-ri --no-rdoc -V
brew install redis
启动 Redis 服务器
以默认设置启动,无需特别复杂的考虑。
redis-server
在端口6379上启动。
请确认在irb中连接到Redis。
简单!
irb> require 'redis'
irb> rd = Redis.new host:"127.0.0.1", port: "6379"
irb> puts rd.keys
[]
irb> rd.set :hello, "world"
irb> rd.keys
=> ["hello"]
irb> rd.get :hello
=> "world"
但是列表操作有些棘手。这似乎是Redis的一个习惯性问题。
在”列表中添加到右侧””列表中添加到左侧”和”从右侧取出”这样的操作中,没有将堆栈的概念反转真是非常新鲜。
无论是队列还是堆栈,都能够自然地理解。真厉害。
创建应用程序
事实上,我对Sinatra一点也不了解。
URL的結構
/main
ログを表示する
発言フォームを表示する
/talk
ログに追記する
/main へリダイレクトする
模板的格式使用 erb。
制作
-
- 名前をセッションに入れる。
-
- 表示は10件まで
- 発言は一行のテキストで無限に redis のリストに突っ込む。
require 'sinatra'
require "sinatra/reloader" if development?
require "rdiscount"
require "redis"
redis = Redis.new host:"127.0.0.1", port:"6379"
configure do
enable :sessions
end
get '/main' do
@name = params[:name]
@logs = redis.lrange :logs, 0,9
erb :main
end
post '/talk' do
msg = params[:msg]
session[:name] = name = params[:name]
redis.lpush :logs, sprintf("[%s] : %s" , name, msg)
redirect '/main'
end
创建一个 views 目录并创建 main.erb 文件。
<form action="/talk" method="post">
<input type="text" name="name" value="<%= session[:name] %>" size="10">
<input type="text" name="msg" value="" size="80">
<input type="submit" value="送信"/>
</form>
<hr/>
<% @logs.each do |log| %>
<p><%= log %></p>
<% end %>
执行
ruby mychat.rb
即使没有 HTML 头部,日志也会无限地存储下去,因此很容易出错,但总之它能够运行。