簡單的功能 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碼的檔案,
需在最前面的檔案加上:
就可順利啟動:
$ 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 的前端