1. 程式人生 > >Rails: 從零到部署至伺服器

Rails: 從零到部署至伺服器

which gem

在這篇文章裡,我們將學到

1. 怎麼用Rails來生成我們的第一個app。

2. 學會怎麼使用Git進行版本控制。

3.怎麼將程式部署至Heroku,Rails服務提供商。

Ruby on Rails是一個最流行、最強大的構建動態網站的一個框架。有很多知名的企業使用Rails,例如:

37signal、Github、Shopify、Scribd、Twitter、Disney、Hulu等等。

為什麼Rails會這麼流行呢?首先因為Rails是一個在MIT協議下得開源程式。其次,Rails也擁有很多優雅和

有競爭力的設計。通過擴充套件Ruby,Rails為編寫網站應用建立了一種優秀的

域名描述語言。因此,許多普通的程式設計

任務--例如生成HTML、生成資料模型、生成URL路由--用Rails來完成都很容易,而且生成的應用的程式碼非常簡潔,具有很高的可讀性。


Rails也適應網頁開發和框架設計的快速發展。例如,Rails是第一個全面使用REST的框架。而且當其他框架的開發者在新技術上取得成功,

David Heinemeier Hansson和Rails核心團隊會毫不猶豫地吸收他們的想法。

最後,Rails受益於充滿不同尋常狂熱得社群。這使得有幾百人為Rails貢獻程式碼。還有定期會議,大量的gem,豐富的部落格,

還有許多高質量的論壇以及IRC頻道。

許多Rails程式設計師也使得處理一些不可思議的錯誤更加容易,“Google錯誤資訊”的演算法幾乎總能得到相關的部落格或者論壇話題。


工欲善其事,必先利其器。下面我們首先選擇編輯器。

IDE

最出名的Rails IDE是RadRails和RubyMine。

編寫Rails程式你可以選擇以上兩者之一,或者其他的。

或者你更偏向於用文字編輯器的話,請看下文。


文字編輯器和命令列

和許多程式設計師一樣,我更喜歡使用文字編輯器。

Windows和Linux下,推薦Subline Text 2, 跨平臺編輯器;Mac下推薦註明的文字編輯神器TextMate。

命令列終端選用iTerm或者系統自帶的都可以。Windows下最好使用虛擬機器或者Rails Installer .

假如你用Sublime Text, 最好根據Rails Tutorial Sublime Text配置你的Sublime Text。

Rails Tutorial Sublime Text


瀏覽器

瀏覽器最好選擇FireFox、Safari、或者Chrome。便於除錯。

Ruby, RubyGems, Rails, and Git

Rails Installer (Windows)

去這裡下載Rails安裝器。

Rails Installer


我們開始安裝開發環境

Install Git

請移步到 github.

Install Ruby

Mac和Linux下請先安裝RVM或rbenv,用於Ruby版本管理。

Windows下用Pik。


當你安裝完以上步驟的時候,你幾乎可以開始我們的旅程了。

不過Mac使用者可能需要先安裝Xcode developer tools。

如果覺得Xcode太大,也可以只安裝Command Line Tools for Xcode.


安裝RubyGems

RubyGmes是Ruby的一個軟體管理專案,其中包括Rails。

一旦安裝了Ruby,或者如果你安裝了Rvm,則也已經安裝了gem了。

在Mac和Linux下可以輸入命令

which gem

測試是否gem安裝成功

如果沒有,下載RubyGems,然後cd進目錄,執行

ruby setup.rb

如果提示沒有許可權,命令列前加sudo


更新gem

gem update --system 

編輯 .gemrc檔案,假如你用的是TextMate的話

mate ~/.gemrc

然後輸入以下(可以略過這步, 這步是為了避免安裝gem文件)

install: --no-rdoc --no-ri
update:  --no-rdoc --no-ri

安裝Rails

安裝完gem之後,安裝Rails就非常容易了。

gem install rails --version 4.1.1

驗證Rails版本

rails --version

如果你用的是Linux,可能還需要安裝以下常用的包

$ sudo apt-get install libxslt-dev libxml2-dev libsqlite3-dev # Linux only

或者

$ sudo yum install libxslt-devel libxml2-devel libsqlite3-devel

至此,我們的環境已經設定好了。如果有什麼問題,可以先google一下。



+++++++++++++++++++++++++++++++++開始我們的教程++++++++++++++++++++++++++++++++++++++++++++


建立我們的第一個Rails應用

$ mkdir rails_projects
$ cd rails_projects
$ rails new first_app
   create
      create  README.rdoc
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
      create  app
      create  app/assets/javascripts/application.js
      create  app/assets/stylesheets/application.css
      create  app/controllers/application_controller.rb
      .
      .
      .
      create  test/test_helper.rb
      create  tmp/cache
      create  tmp/cache/assets
      create  vendor/assets/javascripts
      create  vendor/assets/javascripts/.keep
      create  vendor/assets/stylesheets
      create  vendor/assets/stylesheets/.keep
         run  bundle install
.
.
.
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled
gem is installed.

如果停在bundle install那裡,或者出錯,你可以按Ctrl+C,結束執行。

開啟Gemfile, 將最上面一行

source https://rubygems.org

替換為 

source http://ruby.sdutlinux.org/

也可以替換為

source http://ruby.taobao.org/

原因你懂得。

然後

cd rails_project
bundle install

Rails 自動為我們建立了MVC框架,包括測試的框架。

下面我們看看目錄結構


File/Directory

Purpose

app/

應用程式核心程式碼,包括Model,Controller,Views以及Helper放法。

app/assets

應用程式所需檔案,如css、js、圖片等

bin/

二進位制可執行檔案

config/

配置檔案

db/

資料庫檔案,包括migration等

doc/

應用程式的文件

lib/

lib/assets

庫所需要的檔案,如css、js、圖片等

log/

日誌

public/

從網際網路可以訪問的檔案

bin/rails

生成程式碼的程式,控制檯session,或者啟動一個本地服務

test/

程式測試檔案目錄

tmp/

臨時檔案

vendor/

第三方程式碼,如 plugin和 gem

vendor/assets

第三方程式碼所需檔案

README.rdoc

應用程式簡介

Rakefile

通過rake命令使用的檔案

Gemfile

程式gem依賴配置檔案

Gemfile.lock

用來確保所有應用程式使用相同版本的gem

config.ru

 Rack中介軟體使用的檔案

.gitignore

Git忽略的檔案配置檔案


現在我們可以試著執行我們的程式了

$ rails server<pre name="code" class="html">=> Booting WEBrick
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server

 甚至你可以簡單的輸入 
 

$rails s

假如系統提示缺乏Javascript執行時,最好安裝Node.js.


然後我們在瀏覽器輸入

localhost:3000

你就可以在本地訪問我們剛剛建成的網站了。




網站建成之後,我們用Git來進行版本控制

Git安裝好之後,首先在github.com建立一個賬戶,然後建立一個repository,first_app

然後通過terminal配置git,現在github.com也提供了GUI版本,你也可以直接通過GUI版本控制。

$git config --global user.name "Your name"
$git config --global user.email [email protected]
#下面的這個只是為了方便
$git config --global alias.co checkout

最後,你可以設定編輯Git commit訊息編輯器,取決於你的系統和你所選用的編輯器,你可以選擇以下之一進行設定

#ublime Text 2
$git config --global core.editor "subl -w"
#TextMate
$git config --global core.editor "mate  -w"
#gVim
$git config --global core.editor " gvim -f"
#MacVim
$git config --global core.editor "mvim  -f"


初始化我們的Git repository

$git init


.gitignore裡配置的是git push等操作時需要忽略的檔案


為了安全和方便,我們編輯一下.gitignore檔案

$ mate .gitignore


編輯後的.gitignore


# Ignore bundler config.
/.bundle

# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal

# Ignore all logfiles and tempfiles.
/log/*.log
/tmp

# Ignore other unneeded files.
database.yml
doc/
*.swp
*~
.project
.DS_Store
.idea
.secret


新增檔案和提交

$git add .
$git commit -m "Initialize repository"

你也可以通過git status或者git log檢視git資訊

現在我們終於可以將程式碼提交至github了

$ git remote add origin https://github.com/你的使用者名稱/first_app.git
$ git push -u origin master

現在,我們來修改下README.rdoc,

$ git checkout -b modify-README
Switched to a new branch 'modify-README'
$ git branch
master
* modify-README

這裡新建了一個版本分支,名為modify-README,然後切換到新的版本

然後我們將README.rdoc重新命名為README.md,然後編輯README.md

$git mv README.rdoc README.md
$mate README.md

複製以下內容

# Ruby on Rails Tutorial: first application

This is the first application for the
[*Ruby on Rails Tutorial*](http://railstutorial.org/)
by [rocLv](http://roclv.github.io/).

提交,這裡我們將git add . 和git commit -m合併執行

$ git commit -am "Improve the README file"

將modify-README版本合併至master

$ git co master
Switched to branch 'master'
$ git merge modify-README
Updating 34f06b7..2c92bef
Fast forward
README.rdoc     |  243 --------------------------------------------------
README.md       |    5 +
2 files changed, 5 insertions(+), 243 deletions(-)
delete mode 100644 README.rdoc
create mode 100644 README.md 

現在你如果覺得不需要分支modify-README,你可以通過以下命令刪除

$git branch -d modify-README
<p class="p1">Deleted branch modify-README (was 2c92bef).</p>

使用-D而不是-d則即便我們沒有合併分支,我們一樣可以刪除分支。

通常在我們確實覺得分支被搞亂時執行。


現在我們可以Push我們本地的repository到github了

$git push


下面,也是本文的最後一步,我們將程式部署至Heroku

Heroku使用PosgreSQL作為資料庫伺服器,所以我們必須包含gem ‘pg’

修改Gemfile

group :production do
  gem 'pg', '0.15.1'
  gem 'rails_12factor', '0.0.2'
end

gem rails_12factor被Heroku用來服務靜態資源,如圖片和css等

最好在Gemfile檔案裡申明我們所用的ruby版本

ruby '2.0.0'
#ruby-gemset=railstutorial_rails_4_0

重新執行

$ bundle install --without production
$ git commit -a -m "Update Gemfile.lock for Heroku"

假如部署至Heroku不成功,可以嘗試執行一下

$ rake assets:precompile
$ git add .
$ git commit -m "Add precompiled assets for Heroku"

用Heroku Toolbelt安裝必要的軟體之後,我們就可以開始將程式部署至heroku。

$heroku login
$heroku create
$git push heroku master

部署完畢之後我們可以開始瀏覽我們的網站了

$ heroku open