在紅寶石中使用Sinatra
在本系列文章的前一篇文章中,我們談到了Sinatra是什么。在本文中,我們將看看一些真正的功能性Sinatra代碼,觸摸一些Sinatra功能,所有這些功能將在本系列即將發(fā)表的文章中深入探討。
在開始之前,您'必須繼續(xù)安裝Sinatra。安裝Sinatra和其他寶石一樣容易。Sinatra確實(shí)有一些依賴關(guān)系,但沒有什么重要的,你不應(yīng)該'在任何平臺(tái)上安裝它都沒有任何問題。
$gem安裝sinatra
你好,世界!
Sinatra"Hello world"應(yīng)用程序非常簡單。不包括require line,shebang和whitespace,它只包括三行。這不僅僅是應(yīng)用程序的一小部分,就像Rails應(yīng)用程序中的控制器一樣,這就是全部。你可能注意到的另一件事是你沒有運(yùn)行任何像Rails生成器這樣的東西來生成一個(gè)應(yīng)用程序。只需將以下代碼粘貼到新的Ruby文件中,即可重新完成。
#!/usr/bin/env ruby
require'rubygems'
require'sinatra'
get'/'do
#39;你好,世界!'
結(jié)束
當(dāng)然,這不是'這是一個(gè)非常有用的程序,它's just"Hello world,"但在Sinatra中更有用的應(yīng)用程序是't更大。那么,你如何運(yùn)行這個(gè)小的Web應(yīng)用程序呢?某種復(fù)雜的腳本/服務(wù)器命令?Nope,只需運(yùn)行該文件即可。它'只是一個(gè)紅寶石程序,運(yùn)行它!
inatra$/你好,rb
==Sinatra/0.9.4已從4567開始使用**備份進(jìn)行開發(fā)
還不是很激動(dòng)。它's啟動(dòng)服務(wù)器并綁定到端口4567,因此繼續(xù)并將您的Web瀏覽器指向http://localhost:4567/。在那里'你的"Hello world"消息。以前,Ruby中的Web應(yīng)用程序從未如此簡單。
Using Parameters
所以讓我們看看更有趣的東西。讓's創(chuàng)建一個(gè)名稱與您相符的應(yīng)用程序。為此,我們需要使用一個(gè)參數(shù)。Sinatra中的參數(shù)和其他一切一樣-簡單而直接。
#!/usr/bin/env ruby
require'rubygems'
require'sinatra'
get'
"hello#{params[:name]}!"
結(jié)束
一旦您'進(jìn)行了此更改,您需要重新啟動(dòng)Sinatra應(yīng)用程序。用Ctrl-C殺死它并再次運(yùn)行。(有一種方法可以解決這個(gè)問題,但我們將在未來的文章中看到這一點(diǎn)。)現(xiàn)在,參數(shù)很簡單。我們've做了一個(gè)名為/hello/:name的操作。這種語法模仿URL的樣子,所以轉(zhuǎn)到67http://localhost:4567/hello/Your Name查看它的實(shí)際操作。
/hello數(shù)學(xué)小知識五年級部分與您所做的測試的URL部分匹配,:name將吸收您給出的任何其他文本并將其放入params密鑰:name下的散列。參數(shù)就是那么容易。當(dāng)然,你可以做更多的事情,包括基于regexp的參數(shù),但這幾乎就是你所有需要的。
添加HTML
最后,讓's用一點(diǎn)HTML來刺激這個(gè)應(yīng)用程序。Sinatra會(huì)將從URL處理器獲得的任何信息返回到web瀏覽器。到目前為止,我們've剛剛返回一串文本,但我們可以在其中添加一些HTML而沒有問題。我們'在這里使用ERB,就像在軌道中使用一樣。還有其他(可以說是更好的)選項(xiàng),但這可能是最熟悉的,因?yàn)樗鼛в蠷uby,并且在這里會(huì)做得很好。
首先,如果存在一個(gè)視圖,Sinatra將渲染一個(gè)名為布局的視圖。此布局視圖應(yīng)具有yield語句。此yield語句將捕獲指定的輸出ic視圖正在渲染。這使您可以非常簡單地創(chuàng)建布局。最后,我們有一個(gè)hello視圖,它生成實(shí)際的hello消息。這是使用erb:hello方法調(diào)用呈現(xiàn)的視圖。您'請注意,沒有單獨(dú)的視圖文件。對于這樣一個(gè)小的應(yīng)用程序,最好將所有代碼保存在一個(gè)文件中。雖然視圖在文件末尾是分開的。
#!/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;