在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Ruby/ 1.2 Rails 文件簡介
寫在后面
寫在前面
第六章 Rails 的配置及部署
第四章 Rails 中的模型
4.4 模型中的校驗(yàn)(Validates)
1.3 用戶界面(UI)設(shè)計(jì)
6.5 生產(chǎn)環(huán)境部署
3.2 表單
4.3 模型中的關(guān)聯(lián)關(guān)系(Relations)
4.5 模型中的回調(diào)(Callback)
第五章 Rails 中的控制器
4.2 深入模型查詢
5.2 控制器中的方法
6.2 緩存
3.4 模板引擎的使用
6.4 I18n
第一章 Ruby on Rails 概述
6.6 常用 Gem
1.2 Rails 文件簡介
2.2 REST 架構(gòu)
2.3 深入路由(routes)
第三章 Rails 中的視圖
6.3 異步任務(wù)及郵件發(fā)送
第二章 Rails 中的資源
3.3 視圖中的 AJAX 交互

1.2 Rails 文件簡介

概要:

本課時(shí)介紹 Rails 項(xiàng)目創(chuàng)建后的文件含義,介紹Rails 項(xiàng)目中的三種運(yùn)行環(huán)境, Gemfile 及 Gem,以及 Rake 任務(wù)等。

知識點(diǎn):

  1. 文件含義
  2. 運(yùn)行環(huán)境說明及配置
  3. Gem 和 Gemfile
  4. Rake 任務(wù)

正文

1.2.1 基礎(chǔ)文件介紹

本節(jié)開始前,我們先使用一個(gè)命令,創(chuàng)建 Rails 項(xiàng)目?;蛟S你已經(jīng)知道了,它就是:

rails new shop

提示:如果你已經(jīng)安裝了其他版本的 Rails,那么該命令使用最新的版本創(chuàng)建項(xiàng)目,如果指定其他版本,可以這樣來寫

rails _4.1.5_ new shop

如果你想查看已經(jīng)安裝的 Rails 有哪些版本,可以使用 gem list | grep rails。

好了,我們來看一下 new 為我們創(chuàng)建了哪些文件。

app 文件夾

我們的業(yè)務(wù)邏輯文件存放地,在后面的教程里,我們會經(jīng)常為它增加內(nèi)容,到時(shí)會詳加介紹。

config 文件夾

這里存放的是 Rails 的配置文件。首先,打開 environments 文件夾,我們可以看到三個(gè)文件,這分別對應(yīng) Rails 的三種運(yùn)行環(huán)境,我們開始時(shí)候使用的是 development 環(huán)境,運(yùn)行測試時(shí)是 test 環(huán)境,當(dāng)我們把代碼部署到服務(wù)器上,正式上線的時(shí)候,使用的是 production 環(huán)境。

Rails 允許我們分別為三種環(huán)境做不同的設(shè)置,比如,production 中 config.assets.digest = true,而開發(fā)環(huán)境可以設(shè)為 config.assets.digest = false

Rails 還為我們提供了 I18n 的管理功能,這里還只有 en.yml 一種語言包,后面的課程里,我們將詳細(xì)介紹 I18n 功能,并添加簡體中文和英文語言包。

database.yml 中配置了數(shù)據(jù)庫信息。Rails 默認(rèn)使用 sqlite 數(shù)據(jù)庫作為開發(fā)使用。我們也可以更改它,在 new 的時(shí)候這樣做:rails new shop -d mysql|oracle|postgresql|...

routes.rb 是我們的路由文件,一個(gè)非常重要的文件,我們下一個(gè)章節(jié)將從它開始介紹 Rails 的諸多優(yōu)秀設(shè)計(jì)。

secrets.yml 中的配置分別對應(yīng)三種運(yùn)行環(huán)境,它是用來加密我們的 session 的。

db 文件夾

如果你使用的是 sqlite 數(shù)據(jù)庫,那么你會發(fā)現(xiàn)它存放在這里。sqlite 是一種小型的便于開發(fā)環(huán)境使用的數(shù)據(jù)庫。在生產(chǎn)環(huán)境(production)的數(shù)據(jù)庫,比如 mysql,postgres 等數(shù)據(jù)庫文件,是不需要放到這里的。

migrate 文件夾中,存放的是我們的數(shù)據(jù)庫遷移文件,下一章我們會經(jīng)??吹剿?。

這里還有一個(gè) seeds.rb 文件,可以用它來為項(xiàng)目創(chuàng)建一些初始數(shù)據(jù)。

lib 文件夾

lib,在我們開發(fā) Rails 項(xiàng)目是,會經(jīng)常的擴(kuò)展一些功能,而這些功能具有復(fù)用的特點(diǎn)時(shí),可以把代碼放到 lib 中。

這里我想到了 Rails 的一條哲理:Convention Over Configuration,約定優(yōu)于配置。我們擴(kuò)展的功能文件,可以放到任何可被夾在的目錄下,但是,那違背了 Rails 的這條哲理。

log 文件夾

這里存放的是日志文件,我們可以看到它對應(yīng)了上面的三種運(yùn)行環(huán)境,Rails 把每一種運(yùn)行環(huán)境的 log,都單獨(dú)的存放。

public 文件夾

這里存放的是靜態(tài)文件,比如圖片,html,還有編譯好的 js,css 等。

test

這里是測試文件,我們編寫項(xiàng)目的同時(shí),也會帶領(lǐng)大家編寫對應(yīng)的測試代碼。所以我們后面會經(jīng)常的用到它。

不過,我們使用 Rspec 進(jìn)行測試,測試文件放到 spec 文件夾里。

vendor 文件夾

這是第三方代碼庫,比如我們 clone 下來的 gem,下載的 js 庫等。

Gemfile 文件

在之前的講解中,我們經(jīng)常提到 Gem。

Gem,是 Ruby 編寫的代碼庫的發(fā)布包。一個(gè) Gem 中還可以包含了其他一些 Gem,比如,Rails 就是個(gè) Gem,其中還包含了 activerecord,activesupport 這些 Gem??梢哉f,Rails 就是一大堆 Gem 的集合。

Rails 是通過 Gemfile 文件,來管理眾多 Gem 的。

打開 Gemfile,可以看到我們的項(xiàng)目使用了 Rails 4.2.0 這個(gè)版本的 Gem,使用了 sqlite3 這個(gè)數(shù)據(jù)庫,以及其他的一些 Gem,這都是 Rails 4.2.0 默認(rèn)使用的。

我們是可以修改這個(gè)文件,每次修改之后,我們需要 bundle install,它會把 Gem 的版本號和互相間的依賴關(guān)系重新的配置一遍,并且會自動的更新 Gemfile.lock 這個(gè)文件,然后安裝 Gefile.lock 中聲明的 Gem。

所以,即便我們使用不同的開發(fā)機(jī)器,只要 Gemfile.lock 相同,我們就會安裝相同的 Gem,以保持每個(gè)開發(fā)機(jī)器使用相同的開發(fā)和運(yùn)行環(huán)境。

Rakefile

Rails 為我們提供了很多便捷的 rake 任務(wù),我們通過 rake -T 可以看到,如果加上 rake -T -D,可以看到詳細(xì)的說明。當(dāng)然,我們頁可以自己編寫 rake,把它們放到 lib/tasks/里面,擴(kuò)展名是 .rake。

README.md 文件

為你的項(xiàng)目寫一份 Readme 是很有幫助的,你有注意到.md 這個(gè)格式么?它是 markdown 格式,目前最流行的書寫格式,本書也是用 markdown 寫成的。

英文 介紹在這里,不過我更愿意看這里。

我創(chuàng)建的代碼,可以在這里找到:https://github.com/liwei78/rails-practice-code/tree/master/chapter_1/shop

1.2.2 安裝 Gem

安裝 Gem 時(shí),Ruby(注意,是 Ruby)使用的是 bundler 這個(gè)工具。它的官網(wǎng)在這里:http://bundler.io/

在我們配置 Gemfile 時(shí),經(jīng)常遇到一些配置語法,這里把常見的介紹下:

source 'https://rubygems.org'
# source 'http://ruby.taobao.org' # 我們也可以使用 taobao 這個(gè)安裝源,不過一些 Gem 不存在時(shí),還是要使用 rubygems 官方源的。
gem 'xxx', '~>2.0.3' # ~> 這個(gè)寫法表示當(dāng)前版本大于等于2.0.3,小于2.1版本
gem 'xxx', '~>2.1'   # ~> 這個(gè)寫法表示當(dāng)前版本大于等于2.1,小于3.0版本
gem 'my_gem', '1.0', :source => 'https://gems.example.com' # 我們可以指定自己的 source 源
gem 'nokogiri', :git => 'https://github.com/tenderlove/nokogiri.git', :branch => '1.4' # 也可以指定 Github 地址和分支
gem 'extracted_library', :path => './vendor/extracted_library' # 我們可以從 vendor 文件夾中安裝一個(gè) Gem。
# 我們可以為運(yùn)行環(huán)境指定一個(gè) group,比如,在 development 和 production 環(huán)境中,將不加載 rspec 這個(gè) Gem,它只需要在 test 環(huán)境下工作。
group :test do
  gem 'rspec'
end

翻看 http://bundler.io/gemfile.html,查看更多 Gemfile 的介紹。

1.2.3 運(yùn)行 Rake 任務(wù)

Rake 是一個(gè) Ruby 實(shí)現(xiàn)的類似 make 的工具程序。任務(wù)(Tasks)是由 Ruby 代碼編寫的。這么講有些抽象,我們看看 Rails 為我們提供的幾個(gè) Rake 任務(wù):

rake db:create   # 創(chuàng)建數(shù)據(jù)庫
rake db:migrate  # 更新數(shù)據(jù)庫,更新的文件來自 db/migrate/
rake db:seed     # 執(zhí)行 seed.rb 文件的內(nèi)容,通常是創(chuàng)建一個(gè)默認(rèn)的數(shù)據(jù)。
rake db:drop     # 刪除數(shù)據(jù)庫

上面這些命令,是在 development 環(huán)境下執(zhí)行的,如果要在 production 下執(zhí)行呢?

RAILS_ENV=production rake db:migrate

另一個(gè)常用的,是

rake routes

它會列出我們所有定義的路由(routes)列表。

你也可以自己編寫一個(gè) Rake 任務(wù),放到 lib/tasks/中,擴(kuò)展名為 .rake。