Google App Engine上的Scala+Lift初試
原創(chuàng)【51CTO精選譯文】昨天我試著在 Google App Engine for Java (GAE/J) 運(yùn)行 Lift 程序。對(duì)于這兩者的設(shè)置,你可以從這幾個(gè)資源獲取許多相關(guān)的信息。不過(guò),大多信息都是以前在 4 月份寫的(51CTO編者注:Google App Engine于今年四月開(kāi)始支持Java),現(xiàn)在一些東西已經(jīng)變化了,這些資料,我覺(jué)得對(duì)于我要運(yùn)行的應(yīng)用程序也沒(méi)有很好的幫助。我還知道一些演示程序,但它們很少提供文檔,解釋為什么能夠運(yùn)行或不能。
所以,我想我應(yīng)該寫一個(gè)短小的總結(jié):我是如何在 GAE/J 上運(yùn)行我的 Scala Lift 程序。
創(chuàng)建 Lift 程序
我學(xué)到的***教訓(xùn)是 Lift 1.0 不能在 GAE/J 上工作。你可以部署一個(gè) 1.0 程序,但會(huì)出現(xiàn)有關(guān) Actors 的 HTTP 500 錯(cuò)誤。GAE/J 不支持線程,所有 Actors 理所當(dāng)然無(wú)法工作。Lift 開(kāi)發(fā)者不得不編寫一些代碼來(lái)讓這個(gè)框架變得兼容。因此,你必須使用一個(gè) 1.1 的版本。本文中,我使用的是 1.1-M4 版本。(有關(guān)Lift框架的一些背景,可參考51CTO之前發(fā)布的Scala Lift簡(jiǎn)介。)
使用 Maven 創(chuàng)建一個(gè) Lift 應(yīng)用程序是很簡(jiǎn)單的。關(guān)于如何生成一個(gè)應(yīng)用程序模板,在 Lift: Getting Started 指南中,提供了很不錯(cuò)的說(shuō)明和描述。此外,你還可以按照指南設(shè)置你的 Maven 環(huán)境。不過(guò),你不能使用那篇文章中介紹的 mvn archetype:generate 命令,因?yàn)?archetype 是用于 Lift 1.0 版本的。所以,我們需要修改一些參數(shù),來(lái)獲得一個(gè) 1.1 版本的 archetyp。
使用以下命令生成一個(gè) 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
就這么簡(jiǎn)單,你已經(jīng)創(chuàng)建了一個(gè)應(yīng)用程序。通過(guò)下面的命令,你就啟動(dòng)該程序:
- cd helloworld
- mvn jetty:run
在 Google App Engine 上運(yùn)行 Lift 程序
為了在 Google 中部署你的程序,你需要一個(gè)GAE/J 帳號(hào)。一旦獲得了一個(gè)帳號(hào),你需要注冊(cè)你的應(yīng)用程序。對(duì)于這***程,Google 比我寫的說(shuō)明更好。但是,要記住你選擇的 application-id,后面你將會(huì)用到。***,下載 GAE/J SDK。將 SDK 解壓縮到你的臨時(shí)目錄中。你可以試試下面的命令:
- unzip ~/Downloads/appengine-java-sdk-1.2.2.zip \
- -d ~/tmp/appengine-java-sdk-1.2.2
既然已經(jīng)有了 SDK 安裝文件,你就可以配置你的Lift程序,以便在 GAE/J 上運(yùn)行。這只需要一個(gè)步驟:
創(chuàng)建一個(gè)包含以下內(nèi)容的文件:
- 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”替換為你注冊(cè)應(yīng)用程序時(shí)選擇的 application-id。通過(guò)運(yùn)行以下的命令,你可以使用Maven來(lái)完成:
- mvn package
這樣就可以創(chuàng)建一個(gè)war文件和一個(gè)目錄,其中包含了war文件解壓后的內(nèi)容。后者位于:
- $helloworld/target/helloworld-1.0-SNAPSHOT
現(xiàn)在你可以使用下面的命令,在本地運(yùn)行你的程序:
- ./tmp/appengine-java-sdk-1.2.2/bin/dev_appserver.sh \
- helloworld/target/helloworld-1.0-SNAPSHOT
檢查 http://localhost:8080 以前確保你的程序正確地運(yùn)行,并且與你運(yùn)行 mvn jetty:run 命令時(shí)是相同的。如果正確地運(yùn)行,那么你在 GAE 上的部署工作已經(jīng)準(zhǔn)備好了。為此,請(qǐng)運(yùn)行下面的命令:
- /tmp/appengine-java-sdk-1.2.2/bin/appcfg.sh update \
- helloworld/target/helloworld-1.0-SNAPSHOT
現(xiàn)在,你的程序已經(jīng)準(zhǔn)備好,可以運(yùn)行了。你應(yīng)該可以在http://application-id.appspot.com 處查看該程序。
為什么是 Google App Engine?
對(duì)于 Scala Lift程序,我很清楚GAE并不是一個(gè)最理想的平臺(tái):對(duì)于我最喜歡的 Scala 語(yǔ)言的一項(xiàng)功能:Actors,你不能使用它。對(duì)于我來(lái)講,這個(gè)練習(xí)是一種非常棒的方式,做到了一石二鳥。一直以來(lái),我都想學(xué)習(xí)如何使用 Lift 和 GAE/J。由于這兩者有點(diǎn)不兼容,對(duì)于其中任何一個(gè),我學(xué)到的知識(shí)都比單獨(dú)學(xué)習(xí)其中之一都要多。這也算是一種增效作用,你覺(jué)得如何呢?
原文:Scala and Lift on Google App Engine by Joe
【編輯推薦】