<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 262,  comments - 221,  trackbacks - 0

    也許是使用Java久了,覺得每個程序都應該這么復雜繁瑣,所以當第一次使用RoR在5分鐘內完成一個帶驗證的CRUD頁面后,我徹底地迷上了Rails了,原來寫程序可以這樣簡單而充滿樂趣啊!

    總結一下這個簡單的過程:

    ①下載InstantRails并解壓

    RoR推薦的運行環境是Linux/Unix環境,但在Linux/Unix下的安裝配置比較麻煩(可以參加JavaEye上Robbin寫的文章),在這里以Windows為例,InstantRails是一個Windows下RoR的集成運行環境,目前最新的版本是2.0。它內部集成了運行RoR的所有必須配置,包括:ruby 1.8.6、Rails 2.0.2、gem 1.0.1,甚至還內置了Apache, Mongrel服務器以及MySQL服務器。

    當然你可以說這種集成配置不能滿足生產環境下高性能的要求,那么你可以參考Robbin下的另一篇Windows下配置RoR環境的文章,不過這篇文章中的版本已經過低,而且有些地方(負載均衡)省略了幾個步驟,所以必須結合Apache的文檔進行配置才能成功。

    如果你只是想盡快體驗RoR的魔力,那么到RubyForge上下在這個InstantRails已經足夠。下載后解壓就可以立刻運行了。這里有一個需要注意的地方:

    “由于InstantRails是一個自包含環境,也就是說它有自己獨立的,隔絕的運行時環境,所以你需要執行任何RoR的命令行操作,都必須通過菜單I(就是左上角那個傾斜的I圖標--->Rails Applications ---> Open Ruby console window)進行,通過這個方式打開的命令行窗口,默認加載了RoR運行的所有組件,如果你是通過普通的Windows開始菜單--->運行命令打開的,則可能會出現類似這樣的錯誤:ruby, rails, rake不是可識別或運行的命令”

    ②創建項目的目錄結構

    和J2EE Servlet規范一樣,RoR同樣有固定的目錄結構,通常目錄結構如下:



    ●app:用來存放models,controllers,views,helper代碼的(MVC模型)
    ●config:用來存放應用的配置,最重要的就是database.yml文件
    ●db:用來存放數據庫文件的,RoR內置了Sqlite數據庫,一個數據庫就是一個.sqlite3文件
    ●public:這個是用來存放css,js,image的地方,頁面的所有CSS,JS,圖片鏈接都相對于這個目錄
    ●script:功能無比強大的目錄,里面有代碼生成,啟動服務器,下載并安裝插件的命令
    ●vendor:用來存放第三方插件的目錄

    好,講了這么多那么如何自動生成這個目錄結構呢?只需要在在Ruby運行時console窗口輸入一條命令: 

    rails depot


    一切搞定!depot就是我們項目的名稱,剩下的事情由rails命令去做

    ③創建數據庫并測試連接

    很簡單是吧!下面我們開始創建一個數據庫,由于Rails默認內置了Sqlite數據庫(當然也支持其它數據庫),所以我們采用最簡單的方式(但不代表性能或功能就差!)。我們打開上面提到的config目錄下的database.yml文件。見到如下內容:

    D:\Workspace\RoR\depot>type config\database.yml
    # SQLite version 3.x
    #
       gem install sqlite3-ruby (not necessary on OS X Leopard)
    development:
      adapter: sqlite3
      database: db
    /development.sqlite3
      timeout: 
    5000

    # Warning: The database defined as 'test' will be erased and
    #
     re-generated from your development database when you run 'rake'.
    #
     Do not set this db to the same as development or production.
    test:
      adapter: sqlite3
      database: db
    /test.sqlite3
      timeout: 
    5000

    production:
      adapter: sqlite3
      database: db
    /production.sqlite3
      timeout: 
    5000

    這個文件告訴我們,此刻RoR采用的數據庫適配器是sqlite3,如果是在開發環境下我們的數據庫文件將會是名為:development.sqlite3的文件。另外有對應的測試,生產數據庫,目前這一切都只是紙上談兵,我們需要讓他們getting real!


     rake db:create RAILS_VERSION='development'

    搞定!此時回到db目錄下,你會看到一個名為development.sqlite3的文件已經存在了,這就是我們的數據庫(不需要任何額外的軟件,不需要冗長的安裝或復雜的配置)。也許你會奇怪這個rake命令是干什么的?其實他就類似Java世界中的Ant或Maven,是一個用于構建的工具

    ④創建model,controller,view....

    我們決定要實現一個能夠用于添加,修改,刪除,展示產品的web應用,每個product都有title,description,image,price數據。在傳統的Java做法中,我們需要做以下的步驟:

     A.定義Domain
     B.使用XML文件定義一個映射文件
     C.通過ORM工具建立Domain和XML描述的表格之間的映射
     D.編輯web.xml文件,定義一系列的過濾器,servlet,mapping
     E.創建一至多個Sevlet來完成Controller的功能
     F.定義sevice接口和實現接口
     G.定義dao接口和實現接口
     H.在Spring的配置文件中定義DataSource,IoC,事務管理器

    有時侯我們只是要實現一個看似很簡單的功能,但是Java的框架和思維已經把我們限制在一個奇怪的圈子“沒有使用XML文件的應用就不是好的應用,因為他不夠靈活~~,沒有使用三層結構的應用就不是好的應用,因為它的邏輯會耦合”。的確在企業級應用這種做法無疑是正確且必須的!但是如果放在Web,互聯網的環境中這種做法無疑過于笨重,我們需要需要盡快地把創意變成可以看得見的東西(敏捷宣言第二條:我們認為可以工作的軟件 勝過 面面俱到的文檔)

    讓我們來看看rails如何簡化程序員的工作吧!

     ruby script/generate scaffold product title:string description:text image_url:string price:decimal

    接下來我們會看到在console窗口輸出了一大堆東西,最重要的是它幫我們創建了如下的資源:



    包括了模型:product.rb,控制器:products_controller.rb,視圖:index,new,edit,show。一切都有了
     
    ⑤為數據完整性添加控制

    為了讓我們的程序更加智能,我們決定添加某些驗證的功能,例如非空驗證,長度驗證,唯一性驗證,格式驗證,數字驗證。一切都沒有問題,Rails早就幫我們想好了。于是我們來到app/models/product.rb。使用文本編輯器編輯這個文件,加入如下的命令:

    validates_presence_of :title, :description, :image_url, :price
    validates_length_of :title, :minimum 
    => 10
    validates_numericality_of :price
    validates_uniqueness_of :title


    從字面上看我們知道這分別用于驗證某些字段非空,長度不能下小于10個字符,價格必須是數字類型,而且標題必須全局唯一。太簡單了!

    ⑥Getting real

    上面我們通過4個簡單的命令就完成了一個簡單的帶驗證功能的CRUD功能的應用,那么是不是一切就完成了呢?不是---我們還需要真正的提交:migrate。我們需要把我們所做的一切工作告訴rails,這樣rails才會把這些工作映射到底層的數據庫。于是我們再次執行

     rake db:migrate

    好了!提交工作完成,migrate真是一個魔術般的命令,它能知道當前所做的工作有哪些是已經提交的,那些是未提交的(嗯~很有版本控制的味道嘛,而實際上這也是用了版本控制的理念,只不過是在sqlite3的數據中維護一個叫做:schema_info/schema_migration的表用來記錄migration的版本號)

    ⑦瀏覽我們的工作

    在ruby運行時console窗口,我們輸入如下命令:ruby script/server WEBrick,啟動WEBrick服務器,然后在瀏覽器輸入如下地址:http://localhost:3000/products

    一切就是如此簡單!我們擁有一個可以進行CRUD的簡單應用了,而這一切不過僅僅依靠幾行命令及幾行代碼

    ⑧總結

    下面我們來回憶一下整個過程,我們會發現使用RoR創建Web應用真是如此簡單而充滿樂趣!

    ●命令:
     A.rails 項目名稱
     B.rake db:create RAILS_VERSION='數據庫模式'
     C.ruby script/generate scaffold 表名 字段名:字段類型
     D.rake db:migrate
     E.ruby script/server WEBrick

    ●代碼:
     validates_presence_of :title, :description, :image_url, :price
     validates_length_of :title, :minimum => 10
     validates_numericality_of :price
     validates_uniqueness_of :title

    只需要花你差不多了5分鐘的時間而已~,That's all !

    ●注意點:

    首先,上面的所有命令最好都基于項目的頂級目錄下執行。其次對于rake db:migrate 這個命令,建議在每一次都模型進行修改操作后都執行一次。就像我們每次修改了代碼后使用SVN的commit命令一樣,越早提交越好,提交的改變越小越好。事實上,這也符合敏捷開發的原則:小步前進,頻繁提交和重構



    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2010-05-15 12:02 Paul Lin 閱讀(658) 評論(0)  編輯  收藏 所屬分類: RoR
    <2010年5月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产精品无码久久SM| 亚洲成年网站在线观看| 24小时日本韩国高清免费| 亚洲欧美日韩自偷自拍| 久久久久国产成人精品亚洲午夜 | 青青操视频在线免费观看| 亚洲精品亚洲人成在线观看麻豆| 日韩人妻无码免费视频一区二区三区| 成人A毛片免费观看网站| 亚洲永久在线观看| 精品亚洲综合在线第一区| 免费毛片在线看片免费丝瓜视频 | 亚洲综合小说另类图片动图| 亚洲中文字幕无码永久在线| 欧美男同gv免费网站观看| 国产特黄特色的大片观看免费视频| 亚洲伊人久久大香线蕉在观| 在线亚洲人成电影网站色www| 拍拍拍又黄又爽无挡视频免费| 两个人看的www视频免费完整版| 亚洲色欲啪啪久久WWW综合网| 亚洲av无码专区国产乱码在线观看 | 精品免费tv久久久久久久| 日韩色视频一区二区三区亚洲 | 亚洲美女色在线欧洲美女| 亚洲综合色视频在线观看| 在线免费观看一区二区三区| 中文字幕视频免费| 国产一区二区三区免费观在线| 亚洲av纯肉无码精品动漫| 亚洲三级中文字幕| 亚洲黑人嫩小videos| 国产亚洲美女精品久久久久狼| 五月婷婷亚洲综合| 日韩一品在线播放视频一品免费| 久久免费看黄a级毛片| 日本免费中文字幕| 中文字幕无码毛片免费看| 4hu四虎免费影院www| 日韩大片在线永久免费观看网站 | a毛片免费全部播放完整成|