想要開發 Ruby on Rails 應用嗎?雖然已經有一些(初級的)Ruby on Rails 教程了,但是似乎在如何搭建一個簡潔而更新的本地開發環境方面還有些不甚確定的地方。
這個教程將引導你通過幾個步驟來搭建一個基於 Ubuntu 的 Ruby on Rails 本地開發環境。而這個教程的即將發布的第二部分,將協助你搭建一個 Ubuntu VPS。當前你暫時知道 VPS 是虛擬私人伺服器的意思就可以了,讓我們先將注意力轉回到如何搭建本地開發環境中。
Ruby On Rails? Ubuntu?什麼是 Ruby on Rails?什麼是 Ubuntu 呢?
簡單的說,Ruby on Rails 是一個 Web 開發架構,它可以讓你使用 Ruby 語言開發 Web 應用程式。如其官方網站所述:“Ruby on Rails 是一個開源的 Web 開發架構,它可以提高程式員的編程樂趣和開發效率,它讓你通過慣例優於配置的方式寫出優美的代碼。”
而 Ubuntu,是一個“著重於可用性方面的 Debian Linux衍生髮行版。”它是這些年最流行的 Linux 發行版。更妙的是,Ruby on Rails 和 Ubuntu 都是開源的,也就是說,它們完全免費! 簡述在本教程中,我們使用 Ruby Version Manager (RVM)指令碼來安裝 Ruby on Rails 和 RubyGems,並使用 RubyGems 來安裝 Rails 和 Capostrano。這個機器同時也提供版本控制功能,這是通過 Git 和 PostgreSQL 資料庫來實現的。本教程需要一個新安裝的 Ubuntu 機器和互連網串連,不過大多數的(Debian 和 Ubuntu 衍生版的)Linux 也應該可以。 在本教程寫作時,所用的最新版本是:Ubuntu 10.10、Ruby 1.9.2 和 Rails 3.0.7。本教程也在 Ubuntu 10.04 和即將發布(譯註:現發行)的 Ubuntu 11.04 上測試通過。 在本教程中,我們需要大量使用 Linux 命令列。因此,我在文末附了一篇文中所用到的 Linux 命令的簡短詞彙表。 更新系統那麼讓我們開始吧。首先以管理員身份(或通過 sudo )登入到你的機器,並開啟一個終端視窗。下面的命令都需要在該視窗輸入。貨幣符號$就是命令提示字元,在其後直接輸入命令並按斷行符號即可。 前三個命令將更新軟體包列表、升級當前安裝的軟體包、安裝新的軟體包並刪除衝突的軟體包。這樣你的機器就會保持最新狀態。最後的命令是重啟機器,在大量更新了軟體包後重啟是一個不錯的做法。 $ sudo apt-get update$ sudo apt-get upgrade$ sudo apt-get dist-upgrade$ sudo reboot 為安裝 RVM 做準備機器重啟後,再次登入並開啟一個終端視窗。RVM 指令碼需要先安裝好 Curl 和 Git。Curl 是一個使用多種協議(如 HTTP 或 FTP)進行資料轉送的工具。而“Git 是一個免費的開源分布式版本控制系統,適用於從小型項目到非常大的項目,兼顧了速度和效率。”Git是多數 Ruby on Rails 開發人員所選擇的版本控制系統。 $ sudo apt-get install curl$ sudo apt-get install git-core 配置GitGit 會在 RVM 指令碼中使用,我們也在在本教程的第二部分中使用它。安裝之後,我們需要花一點時間來配置它。配置很容易:只要提供一個使用者名稱和郵件地址即可。 $ git config --global user.name "Your Name"$ git config --global user.email [email protected] 如: $ git config --global user.name "John Doe"$ git config --global user.email [email protected] 安裝 RVM現在我們可以安裝 RVM 了。RVM 的意思是 Ruby 版本管理器,“是一個命令列工具,讓你容易的安裝、管理和使用多個 Ruby 環境及其相應的 Gem 包。”下列命令來安裝這個指令碼。RVM 將安裝在你當前登入使用者的主目錄裡。 $ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )
curl -L get.rvm.io | bash -s stable 切換到主目錄,然後修改使用者的 bash 設定檔案,以確保每次使用者登入時候 RVM 指令碼都會載入。我們使用 Nano 來編輯 bash 設定檔案。Nano 是一個簡單的命令列的文字編輯器,以後我們還會使用到它。 $ cd$ nano .bashrc 在你的 bash 設定檔案末尾加入以下行。編輯之後,按下 CTRL + O 儲存,然後按 CTRL + X 退出 Nano。如果你希望不儲存而退出 Nano,按下 CTRL + X 然後按 N。 [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" 用以下命令列在當前登入中手動重新載入設定檔案,也可以另外開啟一個新的終端視窗自動載入。這樣 rvm 命令就可以用了。 $ source .bashrc 你可以通過下列命令來檢查 RVM 指令碼是否可以工作。 $ type rvm | head -1 如果一切正常,命令將返回“rvm is a function”(rvm 是函數)。否則,可以訪問 RVM 網站的“Troubleshooting your install”欄目找找解決辦法。 為安裝 Ruby 和 RubyGems 做準備在從原始碼編譯和安裝 Ruby 和 RubyGems 時,RVM 可以很方便的查看之間的軟體包依賴關係。 $ rvm notes 可以列出標準版的 Ruby 所需的依賴包,和安裝它們的命令。有些包也許已經安裝好了。 $ sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev 使用 RVM 安裝 Ruby 和 RubyGems首先,我們要安裝 Ruby,“一個動態、開源的簡單而高效的程式設計語言。它的優雅文法便於閱讀並很容易編寫。” 然後我們要安裝 RubyGems,這是一個“首選的 Ruby 軟體包系統。它提供了一個分發 Ruby 程式和庫的標準格式,一個便於使用的管理 Gem 包的安裝工具,一個在任何裝有 RubyGems 的機器上提供 Gem 軟體包的 Gem 伺服器,和發布 Gem 軟體包的標準方式。”
像上面的 RVM 命令描述的,RVM 也有一個命令可以看到哪個版本的 Ruby 可安裝。通過以下命令查看哪些 Ruby 版本可以安裝: $ rvm list known 安裝標準版的 Ruby,由於需要從原始碼編譯,所以需要一些時間。 $ rvm install 1.9.2 使用安裝好的 Ruby 前,需要設定該版本為預設版本。 $ rvm --default use 1.9.2 檢查一下 Ruby 和 RubyGems 的版本,來確保正確安裝。 $ ruby -v$ gem -v 如有必要,手動更新一下 RubyGems 和其他需要更新的 Gem 。 $ gem update --system$ gem update 使用 RubyGems 安裝 RailsRails 全部都打包在 Rails Gem 中。安裝它是這個教程中最容易的部分。使用 RubyGems 來安裝它,即 gem 命令。安裝完成後,檢查其版本來確保正確安裝。 $ gem install rails$ rails -v 使用 RubyGems 安裝 CapistranoCapistrano 是 “一個在多個伺服器上運行指令碼的開源工具。它的主要用途是分發 Web 應用程式。它自動將應用的新版本分發到一個或多個 Web 服務器上,包括執行相關的支援任務,如修改資料庫。”使用 RubyGems 安裝 Capistrano ,並檢查其版本來確保正確安裝。 $ gem install capistrano$ cap -V 安裝 PostgreSQLPostgreSQL 是 “一個複雜的對象-關聯式資料庫系統,支援絕大多數的 SQL 結構,如子查詢、事務和使用者定義的類型和函數。”安裝 PostgreSQL 及其相關軟體包。這些相關軟體是稍後要安裝的 pg Gem所需要的,pg Gem用於串連 PostgreSQL 和 Ruby on Rails。 $ sudo apt-get install postgresql libpq-dev 配置 PostgreSQL安裝好之後,使用增強安全的 pSQL 來配置 PostgreSQL。pSQL 是一個 PostgreSQL 的互動終端,用於管理資料庫任務。
預設情況下,pSQL 登入時不需要口令。我們將修改認證模式並重新載入 PostgreSQL 配置。但在這之前,要給PostgreSQL的系統管理使用者 postgres 指定一個口令。登入到 pSQL,給 postgres 指定一個安全的密碼,然後退出 pSQL。 $ sudo -u postgres psql# \password postgres# \q 現在,將認證模式從 ident 修改為 md5。這將確保登入 pSQL 要求輸入密碼,且密碼是加密儲存的。需要修改的兩行位於設定檔的末尾附近。修改後,重新載入 PostgreSQL 的配置。 $ sudo nano /etc/postgresql/8.4/main/pg_hba.conf$ sudo /etc/init.d/postgresql reload 大多數的 PostgreSQL 的其它配置都儲存在另外的設定檔中。那些配置也可以最佳化,不過不在本教程的範圍內。讓我們將注意力轉回來,如果對其他配置做了修改,也需要重新載入以生效。 $ sudo nano /etc/postgresql/8.4/main/postgresql.conf 現在,本地開發環境已經安裝完成! 測試設定為了確認一切都正常,讓我們開發一個非常小的應用,來瞭解一下 Ruby on Rails。這個過程包括以下步驟:
- 為測試應用建立一個資料庫使用者
- 為測試應用建立一個資料庫
- 使用 PostgreSQL 資料庫建立一個測試應用
- 安裝測試應用需要的 Gem
- 配置測試應用的資料庫連接
- 產生測試應用的簡單架構
- 遷移架構的資料庫到測試應用的資料庫
- 啟動內建的 Web 服務器
- 用瀏覽器訪問測試應用
- 停止內建的 Web 服務器
當以上測試都順利完成後,我們再進行如下步驟:
- 刪除測試應用的資料庫
- 刪除測試應用的資料庫使用者
- 刪除測試應用
這些測試都在本地測試環境中進行。在VPS中測試的約定如下(資料庫使用者名稱和資料庫名來自測試應用程式名稱): Box 1.1
應用程式名稱:test_app
資料庫使用者名稱:test_app
資料庫使用者密碼:apple
資料庫名:test_app_development
首先,使用 createuser 命令來建立測試應用的資料庫使用者。我們用 PostgreSQL 的系統管理使用者 postgres 來操作,-P 參數表示互動輸入密碼。 “>”符號是提問的提示符。 $ sudo -u postgres createuser -P> Enter name of role to add: test_app> Enter password for new role: apple> Enter it again: apple> Shall the new role be a superuser? (y/n) n> Shall the new role be allowed to create databases? (y/n) n> Shall the new role be allowed to create more new roles? (y/n) n> Password: your-postgres-user-password 然後,建立一個測試應用的資料庫使用者為屬主的資料庫。雖然我們可以使用 Rake 來建立資料庫,但是我們要使用 PostgreSQL ,所以讓我們學習一下基本的 PostgreSQL 管理吧。使用 createdb 命令並通過 -O 選項指定資料庫使用者名稱。這裡,還會提示輸入PostgreSQL 的系統管理使用者的密碼。 $ sudo -u postgres createdb -O test_app test_app_development> Password: your-postgres-user-password 現在,資料庫已經建好,可以建立實際的 Ruby on Rails 應用了。切換到你的主目錄,建立一個名為 test_app 的 Rails 應用,並使用 PostgreSQL 作為資料庫後端。-d 選項允許你指定首選的資料庫類型。 $ cd$ rails new test_app -d postgresql 進入到 Rails 應用目錄,使用 Bundler 安裝需要的 Gem。Bundler 會處理“一個應用在整個生命週期內跨越多個機器的依賴關係”,並且“只支援 Rails 3。” $ cd test_app$ bundle install 使用 Nano 修改資料庫設定檔,在開發資料庫配置中添加密碼:“apple”。按照約定和Box 1.1中的設定,資料庫名和資料庫使用者已經設定好了。 $ nano config/database.yml 現在產生一個基本的架構。這將建立一個 User 模型及其控制器。輸入包括 name 和 email 欄位,它們將儲存在資料庫中。 $ rails generate scaffold User name:string email:string 使用 Rake 遷移架構到開發資料庫中。Rake 是 Ruby Make 的縮寫。它是一個“簡單的 Ruby 構建程式,類似於 Make,”允許你建立並遷移資料庫。 $ rake db:migrate 現在,需要在瀏覽器中檢查應用是否工作。啟動內建的伺服器,並用瀏覽器訪問 http://localhost:3000/,特別是,要看看顯示的測試應用的環境資料。再訪問一下 http://localhost:3000/users,可以建立、編輯、查看和刪除一些使用者。 $ rails server 如果一切都看起來正常,就可以停止內建伺服器了。 $ 按下 CTRL+C 當所有的工作都完成,你就可以刪除這個測試應用的資料庫及資料庫使用者了。使用 dropdb 來刪除資料庫。 $ sudo -u postgres dropdb test_app_development> Password: your-postgres-user-password 使用 dropuser 來刪除資料庫使用者。 $ sudo -u postgres dropuser> Enter name of role to drop: test_app> Password: your-postgres-user-password 最後,切換到你的主目錄,刪除全部的測試應用目錄。主要就恢複到一個乾淨的本地開發環境了,可以用於開發 Ruby on Rails 應用了。 $ cd$ rm -r test_app 將在稍後發布的教程的第二部分中,我們將協助你通過幾個步驟來建立一個 Ubuntu VPS,它用於運行(多個)Ruby on Rails 應用。 Q&AQ:FATAL: role “tom” does not exist A:This will happen if the administrator has not created a PostgreSQL user account for you. (PostgreSQL user accounts are distinct from operating system user accounts.) If you are the administrator, see Chapter 20 for help creating accounts. You will need to become the operating system user under which PostgreSQL was installed (usually postgres) to create the first user account. It could also be that you were assigned a PostgreSQL user name that is different from your operating system user name; in that case you need to use the -U switch or set the PGUSER environment variable to specify your PostgreSQL user name Q:Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
Gemfile上加上gem ‘execjs‘ 和 gem ‘therubyracer‘,Gemfile在專案檔夾裡面,不在.rvm裡 gem ‘execjs‘ gem ‘therubyracer‘ 然後運行bundle install之後就可以運行rails server啟動伺服器了 Linux 命令列參考本教程中相關的 Linux 命令按照字母順序列在下方。Linux 命令通常的格式是: 命令 -選項 參數,如:rm -r test_app。更多的細節,可以參考它們的協助頁面,可以用 man [命令]來查看。
- sudo [command] 用於以管理員身份執行命令。
- apt-get dist-upgrade 用於當前發行版的升級,它會自動處理依賴關係。
- apt-get install [package] 用於安裝軟體包
- apt-get update 用於更新軟體包的索引。
- apt-get upgrade 用於更新當前已經安裝的軟體包
- bash <
- cd [location] 切換目錄,如沒有參數則切換到使用者主目錄。
- nano [file] 編輯檔案。
- reboot 重啟機器。
- rm -r [directory] 遞迴地刪除目錄(及其子目錄)。
- source [script] 手動強制 bash 讀取一個指令碼。
- type [command] 顯示 shell 中執行的命令類型。
參考連結
- Ubuntu
- RVM
- Ruby
- RubyGems
- Rails
- Capistrano
- Bundler
- Rake
- PostgreSQL
- Git
深入學習
- The Linux Command Line
- The Linux Command Line Book
- Ruby on Rails Guides
- Ruby on Rails Tutorial
- Ruby on Rails Tutorial Book
- Git Community Book
- Pro Git
- Git Reference
VIA http://coding.smashingmagazine.com/2011/06/21/set-up-an-ubuntu-local-development-machine-for-ruby-on-rails/ |