在紅寶石中使用Sinatra

在本系列文章的前一篇文章中,我們談到了Sinatra是什么。在本文中,我們將看看一些真正的功能性Sinatra代碼,觸摸一些Sinatra功能,所有這些功能將在本系列即將發(fā)表的文章中深入探討。

在開始之前,您'必須繼續(xù)安裝Sinatra。安裝Sinatra和其他寶石一樣容易。Sinatra確實有一些依賴關(guān)系,但沒有什么重要的,你不應該'在任何平臺上安裝它都沒有任何問題。

$gem安裝sinatra

你好,世界!

Sinatra"Hello world"應用程序非常簡單。不包括require line,shebang和whitespace,它只包括三行。這不僅僅是應用程序的一小部分,就像Rails應用程序中的控制器一樣,這就是全部。你可能注意到的另一件事是你沒有運行任何像Rails生成器這樣的東西來生成一個應用程序。只需將以下代碼粘貼到新的Ruby文件中,即可重新完成。

#!/usr/bin/env ruby
require'rubygems'
require'sinatra'
get'/'do
&##39;你好,世界!'
結(jié)束

當然,這不是'這是一個非常有用的程序,它's just"Hello world,"但在Sinatra中更有用的應用程序是't更大。那么,你如何運行這個小的Web應用程序呢?某種復雜的腳本/服務(wù)器命令?Nope,只需運行該文件即可。它'只是一個紅寶石程序,運行它!

inatra$/你好,rb
==Sinatra/0.9.4已從4567開始使用**備份進行開發(fā)

還不是很激動。它's啟動服務(wù)器并綁定到端口4567,因此繼續(xù)并將您的Web瀏覽器指向http://localhost:4567/。在那里'你的"Hello world"消息。以前,Ruby中的Web應用程序從未如此簡單。

Using Parameters

所以讓我們看看更有趣的東西。讓's創(chuàng)建一個名稱與您相符的應用程序。為此,我們需要使用一個參數(shù)。Sinatra中的參數(shù)和其他一切一樣-簡單而直接。

#!/usr/bin/env ruby
require'rubygems'
require'sinatra'
get'
"hello#{params[:name]}!"
結(jié)束

一旦您'進行了此更改,您需要重新啟動Sinatra應用程序。用Ctrl-C殺死它并再次運行。(有一種方法可以解決這個問題,但我們將在未來的文章中看到這一點。)現(xiàn)在,參數(shù)很簡單。我們've做了一個名為/hello/:name的操作。這種語法模仿URL的樣子,所以轉(zhuǎn)到67http://localhost:4567/hello/Your Name查看它的實際操作。

/hello數(shù)學小知識五年級部分與您所做的測試的URL部分匹配,:name將吸收您給出的任何其他文本并將其放入params密鑰:name下的散列。參數(shù)就是那么容易。當然,你可以做更多的事情,包括基于regexp的參數(shù),但這幾乎就是你所有需要的。

添加HTML

最后,讓's用一點HTML來刺激這個應用程序。Sinatra會將從URL處理器獲得的任何信息返回到web瀏覽器。到目前為止,我們've剛剛返回一串文本,但我們可以在其中添加一些HTML而沒有問題。我們'在這里使用ERB,就像在軌道中使用一樣。還有其他(可以說是更好的)選項,但這可能是最熟悉的,因為它帶有Ruby,并且在這里會做得很好。

首先,如果存在一個視圖,Sinatra將渲染一個名為布局的視圖。此布局視圖應具有yield語句。此yield語句將捕獲指定的輸出ic視圖正在渲染。這使您可以非常簡單地創(chuàng)建布局。最后,我們有一個hello視圖,它生成實際的hello消息。這是使用erb:hello方法調(diào)用呈現(xiàn)的視圖。您'請注意,沒有單獨的視圖文件。對于這樣一個小的應用程序,最好將所有代碼保存在一個文件中。雖然視圖在文件末尾是分開的。

#!/usr/bin/env Rub ruby
require \##39;rubygems #35; 39;
require \35; 35; 39;sinatra&\35#39;
get \\\##35;#39;39;
@name=params[:name]
erb:hello
110>end
u\\ó
@
@@@Lot t
&t;t;html和t;t和t;t gt;


@@hello

hello<%=@name%>!

在那里你有它。我們在包括視圖在內(nèi)的大約15行代碼中有一個完整的,功能性的hello world應用程序。在下面的文章中,我們將仔細研究路線,如何存儲和檢索數(shù)據(jù),以及如何使用HAML更好地查看。