2010年11月30日 星期二

是誰能賦予Erlang產生互動Web應用程式的能力?

圖片來源於Nitrogen Project
是Nitrogen賦予Erlang產生互動Web應用程式的能力。

寫在前頭

你會在這篇文章內容得到:
  • 匆匆一瞥Nitrogen面貌,淺淺地瞭解Nitrogen有什麼用?又該用在什麼地方?
  • 如何讓Nitrogen 2.0.3正常地運作在Inets。
卻不會從這裡得到:
  • 如何寫Nitrogen的教學文件。
  • 有關完整Nitrogen內容,因在下英文能力不佳,無法進行翻譯,只能以自己口吻將所知所學記錄下來,還是強烈建議到Nitrogen Project學習比較有系統化內容。

Nitrogen 是使用Erlang能快速開發互動Web應用程式的Web Framework。你可以從Introduction to Nitrogen學到更多有關Nitrogen的知識。


Nitrogen底層用到什麼技術?

  • 支援任何作業系統 (MacOS、 Linux、Windows....等),只要能跑Erlang就都能執行Nitrogen。
  • 必需跑在Mochiweb、Yaws、 Inets等Erlang Web Server。
  • Client-Side使用jQuery和jQuery UI library作為強而有力的後盾。

Nitrogen有什麼特色?

  • Event-Driven Development
    主要是以Erlang 的pattern matching為基礎, 只要在Server-side寫個Erlang function,就能讓補捉事件變得非常簡單,輕易地處理使用者與應用程式互動過程。
  • Brainlessly Easy Ajax
    讓你寫一行程式碼就能輕輕鬆鬆用Ajax去更新或取代部份內容。
  • Ridiculously Simple Comet
    支援Comet機制(註1)。
  • Complex Interfaces: Drag/Drop/Sort
    提供豐富又易於操作的Web UI。
  • Flexible Templating
    簡單又強大的樣板功能。
  • Data Binding
    利用Erlang的data structure和pattern matching實現強大的Databinding功能,更方便顯示像是Blog文章或是comments這種重覆性內容。
  • Erlang Power
    充份運用Erlang特色在開發Web應用程式上面,包含hot code swapping、stability,以及scalability。

安裝Nitrogen的心路歷程

從官網下載Nitrogen2.0.3 for Windows on Inets,解縮後執行start.cmd,卻出現錯誤訊息,感覺Nitrogen官方釋出包好的Erlang版本很舊又怪怪的,所以~決定把v2.0.3的Source Code抓下來自己來弄, 原本認為Source Code下QuickStart版本可以用就好,就想說就此了之,無意間看到Introduction to Nitrogen的install內容,才又下定決心要把它安裝成功,那藉由這次機會,把步驟一一記錄下來提供參考:(以下是整個安裝Nitrogen2.0.3過程,包含失敗而去尋求解決之內容)

  1. 編輯rel\overlay_win\build.cmd,把ERTS改成安裝在自己電腦Erlang5.8.1路徑及安裝後erts位於nitrogen下路徑。

    #找到這兩行
    set ERTS="C:\Program Files\erl5.7.5\erts-5.7.5"
    xcopy /y /e /s %ERTS%\*.* nitrogen\erts-5.7.5\
    #修改成
    set ERTS="C:\Program Files\erl5.8.1\erts-5.8.1"
    xcopy /y /e /s %ERTS%\*.* nitrogen\erts-5.8.1\
  2. build.cmd其中有一行指令有用到tar,但是我的電腦是用7z.exe來解壓縮,所以~我把指令也一併改掉。

    #用7z.exe來解壓縮:
    tar -zxvf nitrogen.tar.gz -C nitrogen
    #改成:
    7z x nitrogen.tar.gz
    7z x nitrogen.tar -onitrogen\
  3. 編輯rel\overlay_win\files\start.cmd,因這檔案是最後安裝完成後,執行Nitrogen的批次檔。

    #將下列這幾行:
    erts-5.7.5\bin\erl -pa %PA% -make
    erts-5.7.5\bin\werl -pa %PA% -boot releases/2.0.3/start -embedded -config etc/app.config -args_file etc/vm.args
    #改成與相對應的erts路徑:
    erts-5.8.1\bin\erl -pa %PA% -make
    erts-5.8.1\bin\werl -pa %PA% -boot releases/2.0.3/start -embedded -config etc/app.config -args_file etc/vm.args
  4. 執行rel\overlay_win\build.cmd,自動就會去make,但事與願違,出現Erlang部份module版本找不到的錯誤訊息,因Nitrogen所要的版本太過老舊,與Erlang5.8.1不符合,看了一下把相關module要用的最新版本記下 。
  5. 編輯rel\overlay_win\nitrogen.rel,將有用到的module改成最新版本數。

    {release,
    {"nitrogen", "2.0.3"},
    {erts, "5.8.1"},
    [
    {kernel, "2.14.1"},
    {stdlib, "1.17.1"},
    {inets, "5.5"},
    {sasl, "2.1.9.2"},
    {runtime_tools, "1.8.4.1"},
    {nitrogen, "2.0.3"},
    {simple_bridge, "1.0"},
    {nprocreg, "0.1"}
    ]
    }.
  6. 再次執行build.cmd,就完成install的動作。
  7. 執行rel\overlay_win\nitrogen\start.cmd,再測試http://localhost:8000/,就可以看到Nitrogen成功地運作。若是不要8000 當port,可以從nitrogen\etc\inets_httpd.erlenv去修改port。

總結

這篇文章只是淡淡地介紹Nitrogen Web Framework,內容滿破碎零散,其主要是記錄自己在安裝過程點點滴滴,安裝後試著邊看Tutorial邊學著寫,感覺還挺好玩的,希望有機會能寫出完整版教學內容。


備註
  1. Comet的補充說明:

沒有留言:

張貼留言