使用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 头部,日志也会无限地存储下去,因此很容易出错,但总之它能够运行。

广告
将在 10 秒后关闭
bannerAds