在30天學習30種技術的第六天,我決定學習Grails Web應用開發框架.html
Grails是基於Groovy和Java的開源Web開發框架。是對流行的Rails或者Django Web框架的JVM(Java虛擬機)響應,幫助開發者應對標準Jetty或者Tomcat服務器快速巧妙開發應用。這篇博客裏,咱們會講到用Grails Eclipse插件建立簡單的Web應用。java
考慮學習Grails的兩個緣由:git
安裝Eclipse很簡單,下載安裝包後解壓就好,在Linux或者Mac上,打開命令器,運行如下命令:web
$ tar -xzvf eclipse-jee-kepler-R-*.tar.gzsql
Windows上用Winzip或者7-zip解壓,解壓後,你會有一個eclipse文件夾,能夠爲可執行文件建個快捷方式。數據庫
請參考Grails的入門指南。api
咱們這裏用的Grails版本是2.3.1. 運行grails -version 來檢查版本號。tomcat
$ grails -version
Grails version: 2.3.1
我第一運行的時候,提示一下信息。ruby
$ grails -version Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/groovy/grails/cli/support/GrailsStarter
這個異常時由於我機器上已經安裝了舊版本的Grails. 在Mac上,到/usr/local/bin路徑,你可能發現另一個安裝版本。我以前可能無心間用brew 安裝了Grails, 如今先卸載掉。服務器
brew uninstall grails
爲Java EE解壓Eclipse Kpler IDE後,打開Eclipse,找到項目位置。打開Help>Eclipse Marketplace, 而後搜索Grails.安裝 "Groovy/Grails Tool Suite(GGTS) for Eclipse Kepler(4.3)". 安裝完後重啓Eclipse.
這裏咱們建一個簡單的連接分享應用。用戶能夠先註冊而後提交連接。
新建Grails 項目步驟File>New>Grails Project,輸入詳細信息,命名爲linkbin.
第一次建立Grails項目須要配置安裝信息,點擊"Configure Grails Installations" 而後添加新的安裝。
也能夠給項目指定不一樣路徑,點擊"Finish" 按鈕。
Eclipse會問你是否要打開"Grails perspective", 點擊 Yes. 項目就建立好並導入到Eclipse了。
程序的領域模型很是簡單。兩個實體:User和Story.
User包含兩塊:email和fullName. 咱們在Email上添加了not blank, email和unique約束。email約束確保郵件格式驗證。fullName有not blank和size約束。size約束是用groovy Range 限制集合,數字,或者字符長度的大小。要新建domain類,右擊domain,選擇New>Domain Class.
建立User 域類,用如下代碼替換User域類代碼。
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 和用戶要提交的Web url相關。 Description 和 submittedOn是link 和提交日期的補充文本。咱們爲link 和escription添加了not blank約束,unique和url約束也加到了link裏。
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 } }
如今給User和 Story添加關聯。用戶能夠提交不少故事,故事屬於用戶,關係以下:
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' } }
Grails從域類生成控制器和視圖很簡單。要爲User域類生成控制器和視圖,打開"Grails Command Wizard ".
它會在能看到全部Grails 命令的地方打開命令窗口,用generate-all命令生成控制器和視圖。
而後它會要求輸入域類的名字,輸入 linkbin.User 而後點擊"Finish"按鈕。
一樣的,給Story域類生成控制器和視圖。
Generate-all命令爲全部實體生成CRUD控制器和視圖。
全部的Grails項目都嵌入到支持運行嵌入式的tomcat服務器上。在本地運行程序,右擊,選擇"Run as grails app".
這回啓動一個嵌入式tomcat servlet容器,能夠在控制檯看到如下日誌。
| 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 程序打包成WAR格式。OpenShift是一個公開的可擴展的開源平臺。若是你用Java, Python, Node.js或者PHP, 你應該看看OpenShift. OpenShift做爲公共平臺服務,你能夠在上面免費發佈應用。
在OpenShift上發佈應用以前,先作如下步驟:
sudo gem install rhc
要更新rhc,輸入
sudo gem update rhc
想了解rhc command-line 工具,更多幫助參考https://openshift.redhat.com/community/developers/rhc-client-tools-install。
OpenShift也有eclipse插件,只是這裏咱們用OpenShift rhc命令工具。
安裝以後,咱們能夠運行如下命令來建立程序。
$ rhc create-app linkbin tomcat-7 postgresql-9.2
這會建立一個程序容器,叫gear,安裝所需的SELinux策略和cgroup配置。OpenShift也會爲你安裝一個私有的git倉庫,並克隆到本地。最後,OpenShift會把DNS 擴散到網絡中。程序可訪問http://linkbin-domain-name.rhcloud.com/.替換你本身惟一的OpenShift域名(有時也叫命名空間)。
咱們要發佈WAR文件,因此須要把OpenShift上默認的文件刪除。
$ git rm -rf src/ pom.xml $ git commit -am "deleted default source code"
到Eclipse, 用postgresql更換datasource配置。 Grails在conf/Datasource.groovy維護全部數據庫配置。用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 } }
如今把全部Grails程序打包成WAR文件,使用Grails WAR 命令。打開"Grails Command Wizard",使用WAR 命令,它會要求輸入文件名,取名target/ROOT.war,會在目標文件夾生成 ROOT.war,複製ROOT.war到你的OpenShift linkbin程序的webapps文件夾。
如今添加war到git倉庫,發佈。
$ git add . $ git commit -am "linkbin app deployed to cloud" $ git push
代碼發佈後WAR就成功部署了,能夠在http://linkbin-{domain-name}.rhcloud.com看到程序。
做爲程序結果演示,能夠到http://linkbin-shekhargulati.rhcloud.com.
這是今天的內容. 但願對你有用,繼續給意見和建議吧。
原文:https://www.openshift.com/blogs/day-6-rapid-web-development-on-the-jvm-with-grails