Google App Engine上的Scala+Lift初試
原創【51CTO精選譯文】昨天我試著在 Google App Engine for Java (GAE/J) 運行 Lift 程序。對于這兩者的設置,你可以從這幾個資源獲取許多相關的信息。不過,大多信息都是以前在 4 月份寫的(51CTO編者注:Google App Engine于今年四月開始支持Java),現在一些東西已經變化了,這些資料,我覺得對于我要運行的應用程序也沒有很好的幫助。我還知道一些演示程序,但它們很少提供文檔,解釋為什么能夠運行或不能。
所以,我想我應該寫一個短小的總結:我是如何在 GAE/J 上運行我的 Scala Lift 程序。
創建 Lift 程序
我學到的***教訓是 Lift 1.0 不能在 GAE/J 上工作。你可以部署一個 1.0 程序,但會出現有關 Actors 的 HTTP 500 錯誤。GAE/J 不支持線程,所有 Actors 理所當然無法工作。Lift 開發者不得不編寫一些代碼來讓這個框架變得兼容。因此,你必須使用一個 1.1 的版本。本文中,我使用的是 1.1-M4 版本。(有關Lift框架的一些背景,可參考51CTO之前發布的Scala Lift簡介。)
使用 Maven 創建一個 Lift 應用程序是很簡單的。關于如何生成一個應用程序模板,在 Lift: Getting Started 指南中,提供了很不錯的說明和描述。此外,你還可以按照指南設置你的 Maven 環境。不過,你不能使用那篇文章中介紹的 mvn archetype:generate 命令,因為 archetype 是用于 Lift 1.0 版本的。所以,我們需要修改一些參數,來獲得一個 1.1 版本的 archetyp。
使用以下命令生成一個 helloworld 程序:
- mvn archetype:generate -U \
- -DarchetypeGroupId=net.liftweb \
- -DarchetypeArtifactId=lift-archetype-blank \
- -DarchetypeVersion=1.1-M4 \
- -DremoteRepositories=http://scala-tools.org/repo-releases \
- -DgroupId=demo.helloworld \
- -DartifactId=helloworld \
- -Dversion=1.0-SNAPSHOT
就這么簡單,你已經創建了一個應用程序。通過下面的命令,你就啟動該程序:
- cd helloworld
- mvn jetty:run
在 Google App Engine 上運行 Lift 程序
為了在 Google 中部署你的程序,你需要一個GAE/J 帳號。一旦獲得了一個帳號,你需要注冊你的應用程序。對于這***程,Google 比我寫的說明更好。但是,要記住你選擇的 application-id,后面你將會用到。***,下載 GAE/J SDK。將 SDK 解壓縮到你的臨時目錄中。你可以試試下面的命令:
- unzip ~/Downloads/appengine-java-sdk-1.2.2.zip \
- -d ~/tmp/appengine-java-sdk-1.2.2
既然已經有了 SDK 安裝文件,你就可以配置你的Lift程序,以便在 GAE/J 上運行。這只需要一個步驟:
創建一個包含以下內容的文件:
- xml version="1.0" encoding="utf-8"?>
- <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
- <application>application-id< SPAN>application>
- <version>3< SPAN>version>
- <system-properties>
- <property name="in.gae.j" value="true" />
- < SPAN>system-properties>
- <sessions-enabled>true< SPAN>sessions-enabled>
- <static-files>
- <exclude path="/**" />
- < SPAN>static-files>
- < SPAN>appengine-web-app>
將“application-id”替換為你注冊應用程序時選擇的 application-id。通過運行以下的命令,你可以使用Maven來完成:
- mvn package
這樣就可以創建一個war文件和一個目錄,其中包含了war文件解壓后的內容。后者位于:
- $helloworld/target/helloworld-1.0-SNAPSHOT
現在你可以使用下面的命令,在本地運行你的程序:
- ./tmp/appengine-java-sdk-1.2.2/bin/dev_appserver.sh \
- helloworld/target/helloworld-1.0-SNAPSHOT
檢查 http://localhost:8080 以前確保你的程序正確地運行,并且與你運行 mvn jetty:run 命令時是相同的。如果正確地運行,那么你在 GAE 上的部署工作已經準備好了。為此,請運行下面的命令:
- /tmp/appengine-java-sdk-1.2.2/bin/appcfg.sh update \
- helloworld/target/helloworld-1.0-SNAPSHOT
現在,你的程序已經準備好,可以運行了。你應該可以在http://application-id.appspot.com 處查看該程序。
為什么是 Google App Engine?
對于 Scala Lift程序,我很清楚GAE并不是一個最理想的平臺:對于我最喜歡的 Scala 語言的一項功能:Actors,你不能使用它。對于我來講,這個練習是一種非常棒的方式,做到了一石二鳥。一直以來,我都想學習如何使用 Lift 和 GAE/J。由于這兩者有點不兼容,對于其中任何一個,我學到的知識都比單獨學習其中之一都要多。這也算是一種增效作用,你覺得如何呢?
原文:Scala and Lift on Google App Engine by Joe
【編輯推薦】