iT邦幫忙

DAY 4
3

建立API為中心的輕量級網站系列 第 4

一個檔案 Sinatra 超簡單上手

簡單的功能 sinatra 可以把程式寫到一個檔案就可以啟動服務。
最簡單的啟動
看一下編輯的檔案及執行的結果:

$ cat simple.rb
require 'sinatra'

get '/' do
 'Hi, 鐵人五'
end
#執行來跑這最簡單的網站
$ ruby simple.rb
simple.rb:4: invalid multibyte char (US-ASCII)
simple.rb:4: invalid multibyte char (US-ASCII)
simple.rb:4: syntax error, unexpected $end, expecting keyword_end
 'Hi, 鐵人五'
        ^

會有錯誤的訊息是因為非ASCII碼的檔案,
需在最前面的檔案加上:

-*- encoding: utf-8 -*-

就可順利啟動:

$ ruby simple.rb
[2012-10-11 09:56:30] INFO  WEBrick 1.3.1
[2012-10-11 09:56:30] INFO  ruby 1.9.3 (2012-04-20) [i686-linux]
== Sinatra/1.3.3 has taken the stage on 4567 for development with backup from WEBrick
[2012-10-11 09:56:30] INFO  WEBrick::HTTPServer#start: pid=3221 port=4567

預設的 WEBrick 執行會有些的限制,就是…
正在跑的 WEBrick,
不像 ROR 的 development 的環境,
檔案隨改隨生效,
需要重新啟動。

安裝shotgun利於開發測試
避免麻煩,安裝 shotgun 這個 webserver,
馬上改的檔案,在其web即期生效,免重開。

$ gem install shotgun --no-rdoc --no-ri
Fetching: shotgun-0.9.gem (100%)
Successfully installed shotgun-0.9
1 gem installed

可指定跑在哪一個port:

$ shotgun simple.rb -p 5555
== Shotgun/WEBrick on http://127.0.0.1:5555/
[2012-10-11 10:04:38] INFO  WEBrick 1.3.1
[2012-10-11 10:04:38] INFO  ruby 1.9.3 (2012-04-20) [i686-linux]
[2012-10-11 10:04:38] INFO  WEBrick::HTTPServer#start: pid=3717 port=5555

為了比 WEBrick 有更好的效能,
加裝 thin :

$ gem install thin
Fetching: eventmachine-1.0.0.gem (100%)
Building native extensions.  This could take a while...
Fetching: daemons-1.1.9.gem (100%)
Fetching: thin-1.5.0.gem (100%)
Building native extensions.  This could take a while...
Successfully installed eventmachine-1.0.0
Successfully installed daemons-1.1.9
Successfully installed thin-1.5.0
3 gems installed

開發測試時期,就是 shotgun + thin 來跑:

$ shotgun -s thin simple.rb -p 5555
== Shotgun/Thin on http://127.0.0.1:5555/
>> Thin web server (v1.5.0 codename Knife)
>> Maximum connections set to 1024
>> Listening on 127.0.0.1:5555, CTRL+C to stop

讓系統上線的時候,不需常改檔案,
就只要用 thin 來跑。

做一個提供檢視web環境變數的連結:

# -*- encoding: utf-8 -*-
require 'sinatra'

get '/' do
 'Hi, 鐵人五'
end

get '/env' do
 env.map{|k,v| "#{k}: #{v}<br />"}
end

env 是 rack 的環境變數,
這裡的 ruby 語法可先不理會。

為了這次的文章說明,
再架了個 實作的測試網站
實機測試比較真實些…
另外,自己不習慣在本機寫網頁程式,
而都用遠端操作測試,
所以不大會有太多的貼圖展示,
就直接連到這測試網站吧!

至於怎麼把 nginx 架在前端,
可參閱舊文 [RoR] 用 nginx 作為 RoR 的前端

系列文章列表


上一篇
Sinatra 與 Ruby on Rails 的比較
下一篇
簡單的 Sinatra 與 Rails 使用對照
系列文
建立API為中心的輕量級網站30

1 則留言

0
ted99tw
iT邦高手 1 級 ‧ 2012-10-12 21:04:11

沙發

果然許多鐵人都有獨家祕方.....趕快筆記先~~~筆記

我要留言

立即登入留言