2011-04-25 38 views
2

在PHP世界中,您可以創建index.php文件,放入一些內聯代碼和原始HTML,運行Apache,它就可以工作。在Ruby上進行PHP風格的Web開發:爲此創建微框架

有很多關於使用內聯代碼等不良做法的討論。所以我們不會在這裏討論這個主題。

如何以同樣的方式啓動我的Ruby應用程序?我想用ERB代碼搞亂,所以看起來這樣

# index.rb 
<h1>Hello world!</h1> 
<div> 
    1 + 1 = <%= 1 + 1 %> 
</div> 

所以我的問題是:

  1. 是什麼使PHP只是工作。
    AFAIU(理解)本地支持PHP中的HTTP,所以我必須使用Rack來支持它與Ruby
  2. 創建我的「微框架」的一些基本知識:使用應用程序/ http服務器(Mongrel,nginx ,綁定到http端口和所有這類工作),處理HTTP請求:會話,params,GET/POST等(Rack?),發送響應(ERB模板)。

所以我可以使PHP風格的web開發與紅寶石我自己的(教育puprposes)microframework:d

UPD

什麼我真正想要做的是一個應用程序至極會只需獲取請求url,運行該文件並返回HTML作爲響應。另外這款應用應該允許一些端口

index.rb 
info/about.rb 
info/contacts.rb 
products/product.rb 

上進行綁定,所以應該解析URL localhost/index.rb和運行index.rblocalhost/products/product.rb?product_id=10和運行products/product.rb,並通過product_id=10作爲PARAMS哈希值。

UPD 2

我覺得好點,開始是挖成Camping microframework來源:

https://github.com/camping/camping

它是關於爲5Kb重,所以我不應該困惑於它

+1

爲什麼不使用Rails或其他基於Ruby的框架?你在做什麼? – Mike 2011-04-25 07:51:35

+0

@Mike,因爲我想知道它是如何工作的,我該如何製作我自己的,如何修補它等等。這是關於學習。當然,在生產中我使用Rails,Sinatra,Camping和其他酷酷的Ruby框架。但我不想僅僅使用它們而是理解它們。我試圖做我自己的微框架,這將與純PHP站點的單獨的「* .rb」文件一起工作。 – fl00r 2011-04-25 09:00:51

回答

3

可以用Ruby編寫CGI腳本,但這通常不會完成,因爲我們有更好的解決方案。

每頁一個文件不是一個非常有用的抽象,它只是PHP支持的一個文件。 Ruby有更好的方法來抽象Web應用程序(比如Sinatra,Rails甚至是Rack),所以我們更願意使用它們。

將文件名放在url中是PHP設計的另一個不幸的副作用。它是實現揭示和不必要的(你沒有得到一個Ruby頁面,你得到一個HTML頁面),所以我們選擇不這樣做。

Ruby中的CGI和FCGI也比其他解決方案慢。這並不是因爲它們可以具有高性能的限制;這主要是因爲加快Ruby Web應用程序的開發速度已經花在了Rack和Rails等更有用的領域。沒有人真正使用CGI,所以沒有人真正關心如何加快速度。如果你真的想要走這條路線,mod_ruby會讓CGI腳本稍微快一點,但是再一次:有更好的方法。

+0

謝謝,@Rein,但它不是好的和壞的,白色和黑色,它是關於如何。我瞭解所有這些副作用,並且我知道所有這些大膽的框架,並將其用於我的工作中。但我需要通過編寫自己的虛擬微框架來從內部理解它。它可以很小並且具有這些副作用,但現在它不是重要的:它是教育,你知道 – fl00r 2011-04-25 16:31:59

+0

CGI腳本不是微框架。它們只是一個特殊的CGI腳本集合。關於這一點沒有什麼「框架」。如果你想學習怎麼做,爲什麼不學習最好的方法? – 2011-04-25 16:33:16

+0

這就像訓練自己使用算盤一樣。當然,算盤是一個很棒的計算工具,但我們現在有更好的計算工具。 – 2011-04-25 16:34:20

2

Apache可以通過加載運行PHP mod_php模塊。

我相信要運行紅寶石,你需要將它安裝在服務器上,並將mod_ruby加載到Apache中。請看:http://www.modruby.net/en/

0

您正在尋找CGI。像mod_phpmod_ruby這樣的Apache模塊只是爲使用PHP或Ruby編寫的CGI腳本提供的。

+0

不,'mod_php'不會包裝PHP CGI二進制文件。這是一個Apache模塊,其工作內部不同於CGI/FastCGI。 – cweiske 2011-04-25 08:20:41