摘要:要安裝,輸入更新到最新版本,執(zhí)行如果需要閱讀額外的安裝命令行工具時的幫助文件,可以瀏覽使用命令設(shè)置好賬戶,這個命令會為你創(chuàng)建一個命名空間,然后上傳你的到服務(wù)器上。也有一個插件,但這篇文章中,我會使用命令行工具。
在“30天學(xué)習(xí)30種新技術(shù)”的第六天,我決定去學(xué)習(xí)一個 web 開發(fā)框架 : Grails。
Grails 是一個基于 Groovy 和 Java 的開源 Web 框架。它是 Java 虛擬機(JVM)上順應(yīng) Rails、Django 等流行 Web 框架而生的,伴隨著標(biāo)準(zhǔn)的 Jetty/Tomcat 服務(wù)器,Grails 能幫助開發(fā)者進行快速的應(yīng)用開發(fā)。在這篇文章中,我們會描述如何用 Grails 的 Eclipse 插件開發(fā)一個簡單的 Web 應(yīng)用。
為什么我們選擇 Grails?
這是考慮到兩個原因:
1. 快速的 Web 開發(fā):它在 Java 虛擬機和掌握的 Java 知識下,也能達到像 Rails 或 Django 那樣的快速開發(fā)的目標(biāo)。
2. 成熟的技術(shù):Grails 是基于 Spring 和 Hibernate 打造的。它可以看作是在這些技術(shù)上加了語法糖(Syntactic Sugar)。
一些基本的 Java 知識是需要的。
2.在你的操作系統(tǒng)上安裝最新版本的 JDK,你可以安裝 OpenJDK 或者 Oracle JDK 7。OpenShift 支持 OpenJDK 6 和 7.
從 Eclipse 官網(wǎng)下載和你操作系統(tǒng)對應(yīng)的最新版 Eclipse 安裝包。在這篇文章寫的時候,最新版的 Eclipse 包叫 Kepler.
安裝 Eclipse 非常容易。只需要解壓你下載的安裝包就可以了。在 linux 或者 Mac 系統(tǒng)上,打開終端,然后輸入:
$ tar -xzvf eclipse-jee-kepler-R-*.tar.gz
在 Wdinows 系統(tǒng)上,你可以用 winzip 或者 7-zip 或者其它解壓軟件來解壓。解壓之后,在文件夾里面應(yīng)該能能看到一個名為 eclipse 的文件夾。你可以按自己意愿為運行程序文件創(chuàng)建一個快捷方式。
安裝 Grails:
請參閱 Grails 的開始使用指引.
現(xiàn)在這篇文章使用的 Grails 版本為 2.3.1。 在命令行下運行 grails -version 能查看你當(dāng)前的 Grails 版本:
$ grails -version
Grails version: 2.3.1
當(dāng)我第一次運行查看版本的命令時,我得到是以下的報錯:
$ grails -version
Exception in thread "main" java.lang.NoClassDefFoundError:
org/codehaus/groovy/grails/cli/support/GrailsStarter
這個錯誤的原因是我這個機子上 Grails 的版本太老了。如果用的是 mac,轉(zhuǎn)到 /usr/local/bin 目錄下,你或者找到另一個安裝文件。我以前可能不記得我安裝過 grails 了,所以我先把舊版卸載了:
第一步:安裝 Eclipse Grails 插件brew uninstall grails
當(dāng)你解壓了和 Java EE 對應(yīng)的 Eclipse Kepler IDE 之后,打開 Eclipse,然后從導(dǎo)航轉(zhuǎn)到 項目的工作空間(Project Workspace)。打開菜單的 Help > Eclipse Marketplace,然后搜索 Grails。安裝"Eclipse Kepler(4.3)的 Groovy/Grails 工具套件"。插件安裝之后重啟 Eclipse。
第二步:創(chuàng)建一個新的 Grails 項目在這篇文章中,我們的目標(biāo)是編寫一個簡單的鏈接分享應(yīng)用。用戶可以首先注冊應(yīng)用,然后自己提交鏈接。
創(chuàng)建一個新項目:文件 > 新建 > Grails 項目,然后完善項目信息。這個應(yīng)用的名字是 Linkbin。
當(dāng)我們第一次創(chuàng)建 Grails 項目時,我們必須配置 Grails 的安裝環(huán)境。點開"Grails 安裝配置(Configure Grails Installations)",然后增加一個新的 Grails 安裝。
像在下圖那樣,我們可以自己為項目設(shè)置一個不同的存放路徑。然后完成后,點擊"完成(Finish)"按鈕。
Eclipse 會問我們是否需要打開"Grails 視角(Grails perspective)",選擇"是"。項目就會被創(chuàng)建,然后被導(dǎo)入到 Eclipse 里面。
第三步:創(chuàng)建一個領(lǐng)域模塊(Domain model)應(yīng)用的領(lǐng)域模塊非常簡單,我們需要兩個條目:User 和 Story。
User 條目有兩個屬性:email 和 fullName。我們會為 email 屬性增加 not blank、email、unique 限制。email 限制能把這個屬性的內(nèi)容檢測限定為 email 格式。fullName 屬性有 not blank和size兩個限制。其中,size 的量使用 groovy 的 range 來限定長度集合、數(shù)字或者內(nèi)容長度等的大小。為了創(chuàng)建一個新的 domain 類,右擊 domain,然后選擇 New > Domain Class.
這會創(chuàng)建一個 User 領(lǐng)域類(domain class)。用下面的代碼代替 User 領(lǐng)域類的代碼:
package linkbin class User { String email String fullName static constraints = { email unique:true , blank : false , email:true fullName size:5..100 , blank : false } }
Story 條目也有三個屬性:link,description,submittedOn. link 屬性對應(yīng)用戶所提交的網(wǎng)址,description 和 submittedOn 是所提交網(wǎng)址的額外文字內(nèi)容和提交日期。我們會為 link 和 description 屬性加上 not blank(非空)限制。同樣的,link 屬性也會被加上 unique 和 url 限制。
package linkbin class Story { String link String description Date submittedOn static constraints = { link url : true , blank : false ,unique : true description size : 10..1000 , blank : false } }
現(xiàn)在,我們連接 User 和 Story 起來。 一個用戶可以提交多個故事,每個故事都都有所屬的用戶。它們的關(guān)系如下所示:
package linkbin class User { String email String fullName static hasMany = [stories : Story] static constraints = { email unique:true , blank : false , email:true fullName size:5..100 , blank : false } static mapping = { table "users" } }
一個故事屬于一個用戶:
package linkbin class Story { String link String description Date submittedOn static belongsTo = [user : User] static constraints = { link url : true , blank : false ,unique : true description size : 10..1000 , blank : false } static mapping = { table "stories" } }第四步:從領(lǐng)域模塊搭建控制器和視圖
在 Grails 上,要為領(lǐng)域模塊產(chǎn)生控制器(controller)和視圖(view)非常簡單。為了為 User 的領(lǐng)域類產(chǎn)生控制器和視圖,打開"Grails Command Wizard".
它會在能看見所有 Grails 命令的地方打開命令向?qū)?wizard)。我們會使用 generate-all 命令去產(chǎn)生控制器和視圖。
下一步它會詢問領(lǐng)域類的名字。輸入 linkbin.User 然后,點擊"完成"。
類似的,為 Story 領(lǐng)域類產(chǎn)生控制器和視圖。
那個 Generate-all 命令會為這兩個條目生成 CRUD 控制器和視圖。
第五步:運行程序每個 Grails 項目都自帶連接了一個 tomcat 服務(wù)器。為了在本地上運行程序,右擊項目,然后選擇"運行 grails 應(yīng)用"(Run as Grails app)。
這會啟動內(nèi)嵌的 tomcat 程序容器,然后我們能在控制臺看到以下的日志:
配置到云上| Loading Grails 2.3.1
| Configuring classpath.
| Environment set to development.....
| Packaging Grails application.....
| Running Grails application
| Server running. Browse to http://localhost:8080/linkbin
Grails 應(yīng)用會被打包成 war 格式的文件。OpenShift 是一個開源的,公開的,可擴展的服務(wù)平臺。如果你是一個 Java,Python,Node.js, Ruby 或者 php 開發(fā)者,你應(yīng)該留意下 OpenShift 。在 OpenShift,你可以免費把你的程序部署字在上面。
在我們部署應(yīng)用到 OpenShift 之前,我們要做先做這些事情:
1. 注冊一個 OpenShift 賬戶。這是完全免費的,而且紅帽(Red Hat)會給每個用戶三個免費的 Gears,在 Gears 上你可以運行你的程序。在這篇文章寫的時候,OpenShift 會為每個用戶分配 1.5GB 的內(nèi)存和 3GB 的硬盤空間。
2.在本機上,安裝 rhc 客戶端工具。rhc 是一個 ruby gem,所以你需要機子上安裝好 ruby 1.8.7 及以上的 ruby。要安裝 rhc,輸入:
sudo gem install rhc
更新 rhc 到最新版本,執(zhí)行:
sudo gem updatge rhc
如果需要閱讀額外的安裝 rhc 命令行工具時的幫助文件,可以瀏覽:https://openshift.redhat.com/community/developers/rhc-client-tools-install
3.使用 rhc setup 命令設(shè)置好 OpenShift 賬戶,這個命令會為你創(chuàng)建一個命名空間,然后上傳你的 ssh keys 到 OpenShift 服務(wù)器上。
OpenShift 也有一個 Eclipse 插件,但這篇文章中,我會使用 rhc 命令行工具。
在設(shè)置好之后,運行下面命令創(chuàng)建 OpenShift 應(yīng)用:
$ rhc create-app linkbin tomcat-7 postgresql-9.2
它會為我們創(chuàng)建一個應(yīng)用容器,叫做 Gear,會自動設(shè)置好需要的 SELinux/cgroup 配置。OpenShift 也會為我們建立一個私密的 git 倉庫,然后可克隆這個倉庫到本地系統(tǒng)上。最后,OpenShift 還會部署一個連接外面的 DNS。部署的應(yīng)用可以通過鏈接: http://linkbin-domain-name.rhcloud.com/ 來訪問。把領(lǐng)域換成自己的 OpenShit 領(lǐng)域(有時候叫 命令空間)
由于我們要部署 war 文件,我們必須刪除由 OpenShift 默認產(chǎn)生的資源文件。
$ git rm -rf src/ pom.xml
$ git commit -am "deleted default source code"
打開 Eclipse,用 postgresql 改變數(shù)據(jù)來源的配置。Grails 在 conf/Datasource.groovy 文件中維護所有的數(shù)據(jù)庫配置。更新生產(chǎn)環(huán)境的配置以使用 PostgreSQL.
production { dataSource { dbCreate = "update" driverClassName = "org.postgresql.Driver" dialect = org.hibernate.dialect.PostgreSQLDialect uri = new URI(System.env.OPENSHIFT_POSTGRESQL_DB_URL) url = "jdbc:postgresql://"+uri.host+uri.path+"/"+System.env.OPENSHIFT_APP_NAME username = System.env.OPENSHIFT_POSTGRESQL_DB_USERNAME password = System.env.OPENSHIFT_POSTGRESQL_DB_PASSWORD } }
現(xiàn)在我們需要把 grails 應(yīng)用打包成 war 文件。我們會使用 grails 的 war 命令來完成這個。打開 "Grails Command Wizard", 使用 war 命令。它會詢問一個名字作為 war 文件的名字,我們把文件設(shè)成:target/ROOT.war。 她會在目標(biāo)文件中生出 ROOT.war 文件。復(fù)制 ROOT.war 到 OpenShift linkbin 應(yīng)用的 webapps 文件夾中。
現(xiàn)在,把 war 文件也加入到你的 git 倉庫中,然后 push 改變的內(nèi)容。
$ git add . $ git commit -am "linkbin app deployed to cloud" $ git push
當(dāng)代碼成功推送(push),而 war 也成功部署之后,我們可以訪問:http://linkbin-{domain-name}.rhcloud.com 來看看程序運行的情況。
作為一個教訓(xùn)性質(zhì)的 demo,項目的最終效果你可以在這里看到:http://linkbin-shekhargulati.rhcloud.com .
這就是今天的內(nèi)容了。我希望這篇文章能幫到閱讀這個系列的開發(fā)者們。隨時歡迎反饋信息、
接下來在線登錄 OpenShift 帳號
通過評估 OpenShift 企業(yè)版獲得自己的私有 PaaS(Platform As a Service)。
需要幫助? 去 OpenShift Community 論壇問問題。
在 OpenShift Developer Spotlight 中展示你的酷應(yīng)用。今天就開始瀏覽下OpenShift 應(yīng)用展覽
原文:Day 6: Rapid Web Development on the JVM with Grails
翻譯:Segmentfault
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/63995.html
摘要:上面主要是將新的多了些什么。在新版本的設(shè)計中,他們使用腳本來代替原先的腳本。可以看到在新的架構(gòu)中多出了很多組件。他究竟是如何操作的呢首先,我們必須準(zhǔn)備好系統(tǒng)例如。當(dāng)剛剛推出的時候,包含了應(yīng)用運行時啟動,停止等簡單命令。 CloudFoundry距離發(fā)布已經(jīng)一年多了。在這一年里CloudFoundry不論是社區(qū)還是代碼日臻成熟,擁有了眾多合作伙伴。現(xiàn)在他邁開了更大的腳步,新的CloudFou...
摘要:旨在記錄自己的學(xué)習(xí)過程,方便日后遇到問題是及時查閱復(fù)習(xí),另一方面也希望能幫助像筆者一樣從來沒使用過的人快速熟悉。 這篇文章主要記錄的是本人學(xué)習(xí)使用IntelliJ IDEA的筆記,可能不是特別的詳細。旨在記錄自己的學(xué)習(xí)過程,方便日后遇到問題是及時查閱復(fù)習(xí),另一方面也希望能幫助像筆者一樣從來沒使用過IDEA的人快速熟悉IDEA。文章錯誤之處還請各位大佬批評指正。(文末有本人的微信公眾號,...
摘要:日期和時間處理日期和時間的函數(shù)庫。使用中可觀察序列,創(chuàng)建異步基于事件應(yīng)用程序的函數(shù)庫。為分布式系統(tǒng)提供延遲和容錯處理。發(fā)布使用本機格式分發(fā)應(yīng)用程序的工具。將程序資源和打包成和的本機文件。圖像處理用來幫助創(chuàng)建評估或操作圖形的函數(shù)庫。 好資源要分享原文 譯者 唐尤華 翻譯自 github akullpp 構(gòu)建 這里搜集了用來構(gòu)建應(yīng)用程序的工具。 Apache Maven:Mave...
摘要:物聯(lián)網(wǎng)平臺編譯一步到位物聯(lián)網(wǎng)平臺編譯一步到位簡介項目前置準(zhǔn)備安裝安裝將放入本地緩存配置鏡像地址編譯運行物聯(lián)網(wǎng)平臺編譯一步到位先上編譯結(jié)果,耗時分秒簡介是一個開源物聯(lián)網(wǎng)平臺,可實現(xiàn)物聯(lián)網(wǎng)項目的快速開發(fā)管理和擴展。 ...
摘要:主要是避免引入太多的復(fù)雜性,并且出于靈活部署的需要。以應(yīng)用為例,由于實際上是在上執(zhí)行,若它被阻塞,即導(dǎo)致后續(xù)請求全部無法得到處理。因此,最合適的做法就是對于簡單業(yè)務(wù),采用異步庫。本系列其他文章入坑須知入坑須知入坑須知 最開始覺得這個系列也就最多3篇了不起了(因為事不過三嘛),沒曾想居然迎來了第四篇! Kotlin 由于最近決定投身到區(qū)塊鏈的學(xué)習(xí)當(dāng)中的緣故,出于更好的理解它的基本概念,自...
閱讀 2373·2021-11-24 10:26
閱讀 2565·2021-11-16 11:44
閱讀 1695·2021-09-22 15:26
閱讀 3565·2021-09-10 11:11
閱讀 3178·2021-09-07 10:25
閱讀 3615·2021-09-01 10:41
閱讀 1002·2021-08-27 13:11
閱讀 3498·2021-08-16 11:02