接觸ruby on rails 已經有一段時間了,想記錄一下自己的rails歷程。自己寫一些小例子來幫助學習。
Rails 適用於那些以數據為中心的應用,很多應用的核心部分包括一個數據庫,這些引用的存在的主要原因是為了讓客戶可以通過它們來操作數據庫,而不是直接使用SQL。
Rails應用的組成部分:
(1)ActionPack的應用框架。用來負責幫助生成數據驅動的交互頁面來訪問和修改數據庫。
(2)Web服務器。可以是rails內置的web服務器也可以用apache等。
(3)數據庫。可以是rails自帶的sqLite或者是mysql等。
(4)對象-關系映射庫。Rails提供了名為ActiveRecord的對象-關系映射庫。
(5)Rails的工具腳本工具。例如支架(scaffolding),遷移(migration)。
(—)用Rails創建Web應用:
(1)在命令行中輸入:
1 steven@ubuntu:~/RubymineProjects$ rails new OAONLINE
輸出如下信息:
1 create 2 create README.rdoc 3 create Rakefile 4 create config.ru 5 create .gitignore 6 create Gemfile 7 create app 8 create app/assets/javascripts/application.js 9 create app/assets/stylesheets/application.css 10 create app/controllers/application_controller.rb 11 create app/helpers/application_helper.rb 12 create app/views/layouts/application.html.erb 13 create app/assets/images/.keep 14 create app/mailers/.keep 15 create app/models/.keep 16 create app/controllers/concerns/.keep 17 create app/models/concerns/.keep 18 create bin 19 create bin/bundle 20 create bin/rails 21 create bin/rake 22 create config 41 ..............
此時OAONLINE應用就創建成功。
啟動Web應用:
進入OAONLINE程序所在目錄,查看rails為我們生成的目錄文件。
1 steven@ubuntu:~/RubymineProjects$ cd OAONLINE/ 2 steven@ubuntu:~/RubymineProjects/OAONLINE$ ls -l 3 total 60 4 drwxrwxr-x 8 steven steven 4096 Oct 31 21:43 app 5 drwxr-xr-x 2 steven steven 4096 Oct 31 21:43 bin 6 drwxrwxr-x 5 steven steven 4096 Oct 31 21:43 config 7 -rw-rw-r-- 1 steven steven 154 Oct 31 21:43 config.ru 8 drwxrwxr-x 2 steven steven 4096 Oct 31 21:43 db 9 -rw-rw-r-- 1 steven steven 1176 Oct 31 21:43 Gemfile 10 -rw-rw-r-- 1 steven steven 2715 Oct 31 21:44 Gemfile.lock 11 drwxrwxr-x 4 steven steven 4096 Oct 31 21:43 lib 12 drwxrwxr-x 2 steven steven 4096 Oct 31 21:43 log 13 drwxrwxr-x 2 steven steven 4096 Oct 31 21:43 public 14 -rw-rw-r-- 1 steven steven 253 Oct 31 21:43 Rakefile 15 -rw-rw-r-- 1 steven steven 478 Oct 31 21:43 README.rdoc 16 drwxrwxr-x 8 steven steven 4096 Oct 31 21:43 test 17 drwxrwxr-x 3 steven steven 4096 Oct 31 21:43 tmp 18 drwxrwxr-x 3 steven steven 4096 Oct 31 21:43 vendor
生成文件的含義,以后在說明。接下來啟動應用程序。
1 steven@ubuntu:~/RubymineProjects/OAONLINE$ rails server 2 => Booting WEBrick 3 => Rails 4.0.0 application starting in development on http://0.0.0.0:3000 4 => Run `rails server -h` for more startup options 5 => Ctrl-C to shutdown server 6 [2013-10-31 21:52:49] INFO WEBrick 1.3.1 7 [2013-10-31 21:52:49] INFO ruby 2.0.0 (2013-06-27) [i686-linux] 8 [2013-10-31 21:52:49] INFO WEBrick::HTTPServer#start: pid=5263 port=3000
應用正常啟動,然后在頁面瀏覽一下,看看程序運行的結果:在瀏覽器中輸入地址: http://0.0.0.0:3000
這樣第一步完成的很順利。
(二)接下來定制我們自己的需求
(1)利用支架生成界面和一些背后的代碼例如路由的設置,控制器的編寫等詳細工作(在后面的章節詳解)
OAONLINE是每個公司可以公用的一個OA系統。滿足每個公司的基本辦公需求。我們需要創建的頁面允許我們創建,讀取,更新,和刪除每個公司的信息。Rails提供一種方式就可以快速生成需要的所有代碼和頁面。scaffolding(支架)。下面先看一下公司有哪些屬性。
下面讓我們見證神奇的時刻。在命令行中輸入如下信息:
1 steven@ubuntu:~/RubymineProjects/OAONLINE$ rails generate scaffold company name:string phone:string address:string email:string fax:string description:text level:decimal
然后產生如下輸出:
1 invoke active_record 2 create db/migrate/20131101054917_create_companies.rb 3 create app/models/company.rb 4 invoke test_unit 5 create test/models/company_test.rb 6 create test/fixtures/companies.yml 7 invoke resource_route 8 route resources :companies 9 invoke scaffold_controller 10 create app/controllers/companies_controller.rb 11 invoke erb 12 create app/views/companies 13 create app/views/companies/index.html.erb 14 create app/views/companies/edit.html.erb 15 create app/views/companies/show.html.erb 16 create app/views/companies/new.html.erb 17 create app/views/companies/_form.html.erb 18 invoke test_unit 19 create test/controllers/companies_controller_test.rb 20 invoke helper 21 create app/helpers/companies_helper.rb 22 invoke test_unit 23 create test/helpers/companies_helper_test.rb 24 invoke jbuilder 25 create app/views/companies/index.json.jbuilder 26 create app/views/companies/show.json.jbuilder 27 invoke assets 28 invoke coffee 29 create app/assets/javascripts/companies.js.coffee 30 invoke scss 31 create app/assets/stylesheets/companies.css.scss 32 invoke scss 33 create app/assets/stylesheets/scaffolds.css.scss
(2)對應的數據庫
到目前為止,我們還沒有討論關於數據庫的問題,我們查看一下rails在創建項目的時候為我們生成的目錄中有個文件夾叫做db,進去看一下
1 steven@ubuntu:~/RubymineProjects/OAONLINE/db$ ll 2 total 16 3 drwxrwxr-x 3 steven steven 4096 Oct 31 22:49 ./ 4 drwxrwxr-x 12 steven steven 4096 Oct 31 21:44 ../ 5 -rw-r--r-- 1 steven steven 0 Oct 31 21:54 development.sqlite3 6 drwxrwxr-x 2 steven steven 4096 Oct 31 22:49 migrate/ 7 -rw-rw-r-- 1 steven steven 343 Oct 31 21:43 seeds.rb
這是Rails給默認設置的數據庫,我們可以修改,在此將數據庫改為mysql。修改方式如下:
rails給我們生成的文件中有個config文件夾,里面有database.yml文件,打開文件,發現里面有如下一段內容:
1 development: 2 adapter: sqlite3 3 database: db/development.sqlite3 4 pool: 5 5 timeout: 5000 6 7 # Warning: The database defined as "test" will be erased and 8 # re-generated from your development database when you run "rake". 9 # Do not set this db to the same as development or production. 10 test: 11 adapter: sqlite3 12 database: db/test.sqlite3 13 pool: 5 14 timeout: 5000 15 16 production: 17 adapter: sqlite3 18 database: db/production.sqlite3 19 pool: 5 20 timeout: 5000
將development中的內容修改如下:
development: adapter: mysql2 database: oaonline host: 192.168.0.101 username: root password: root encoding: utf8 reconnect: false pool: 5 timeout: 5000
通過遷移來創建數據表:rake db:migrate
竟然出現如下問題:
1 (in /home/steven/RubymineProjects/OAONLINE) 2 rake aborted! 3 Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile. 4 /home/steven/RubymineProjects/OAONLINE/config/environment.rb:5:in `<top (required)>' 5 Tasks: TOP => db:migrate => environment 6 (See full trace by running task with --trace)
將'mysql2'添加到Gemfile中,Genfile在程序的根目錄中。添加如下代碼:
1 gem 'mysql2'
再次執行命令:rake db:migrate
1 steven@ubuntu:~/RubymineProjects/OAONLINE$ rake db:migrate 2 == CreateCompanies: migrating ================================================ 3 -- create_table(:companies) 4 -> 0.0327s 5 == CreateCompanies: migrated (0.0330s) =======================================
此時數據表創建完成。
下面看一下咱們的工作成果:在瀏覽器中輸入如下地址:http://0.0.0.0:3000/companies
如下為我們生成的幾個頁面:
OK。大概就是這個樣子,實在希望大家幫我指點一下。多多交流。