Skip to content

Rails 佈署虛擬機使用 Ubuntu 14.04、Nginx、Passenger

AskBear edited this page Oct 16, 2015 · 5 revisions

前置作業

1.確保所有資料都在最新的狀態,並安裝必要軟體:

終端機輸入指令:

$ sudo apt-get update
$ sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties

2.安裝 Ruby

可選擇使用rbenvRVM。這裡的機器是使用rbenv,不過部署上差別應該只在於Passenger使用Ruby的路徑。

3.安裝資料庫軟體

選擇mysql或postgresql,記得搭配對應的gem、更改Rails的database.yml

4.搭配SSH、VPS使用

可看過本篇再參考ihowerMotion Express的教學文章。

Passenger + Nginx

1.安裝:

$ sudo gem install bundler passenger --no-ri --no-rdoc
$ sudo passenger-install-nginx-module

注意:

由於rbenv、RVM這些版本控管系統是針對當前使用者安裝Ruby的,在這直接使用sudo的話,root可能會出現沒有gem這個指令的錯誤。

以RVM來看:

雖然有安裝全域Ruby的方法,但是一般Ubuntu安裝套件並不建議這麼做。不過nginx是必須安裝在root的套件,而我們要使用的是配合passenger(是一個 gem)的nginx,所以這時就需要rvmsudo來暫時讓root可以使用RVM安裝的Ruby來安裝passenger,並且接下來再使用rvmsudo來安裝nginx,才能正確安裝(請注意上面的指令是讓nginx配合passenger進行安裝)。

以下是nginx的安裝畫面流程:

選擇Ruby

選擇Ruby

這裡選擇1

這裡選擇1

這是設定安裝路徑,可以直接enter

這是設定安裝路徑,可以直接enter

2.安裝完成後設定腳本:

$ wget -O init-deb.sh http://www.linode.com/docs/assets/1139-init-deb.sh
$ sudo mv init-deb.sh /etc/init.d/nginx
$ sudo chmod +x /etc/init.d/nginx
$ sudo /usr/sbin/update-rc.d -f nginx defaults

3.接著可以使用以下指令啟動、關閉、重啟server:

$ sudo service nginx start
$ sudo service nginx stop
$ sudo service nginx restart

最後在瀏覽器輸入你的ip看到以下畫面表示安裝成功:

nginx start

設定Nginx

1.修改/opt/nginx/conf/nginx.conf

這會需要root的權限才可更改,內容請參考下列圖文:

找到passenger_ruby,並將路徑改為你用rbenv或RVM安裝的Ruby的路徑。

e.g. /home/rails/.rbenv/shims/ruby rails是你的使用者名稱

注意:

如果你是使用rvmsudo安裝passenger + nginx,你的passenger_ruby則應該已經指向 /.rvm的Ruby路徑,理論上不需修改。

接著修改sever block:

nginx.conf

  • listen是你使用的port

  • server_name是你的domain

  • root是Rails app的路徑,請注意位置是Rails app的public資料夾

  • passenger_env_var SECRET_KEY_BASE可以使用在你的專案下執行rake secret產生的secret key

接著location這塊block請註解起來,儲存後完成設定。

請注意你的Rails app的使用權限,參考以下指令:

$ chmod g+x,o+x /home/rails/deploy/railsapp

接下來sudo service nginx restart應該會看到網頁的畫面了。

假如你的專案有使用database,則會看到Rails的錯誤訊息,請繼續下一步。

2.建立資料庫,在你的Rails app下執行下列命令:

$ RAILS_ENV=production bin/rake db:create
$ RAILS_ENV=production bin/rake db:migrate

如果你有設定seed.rb也可直接執行:

$ RAILS_ENV=production bin/rake db:reset

如果有需要使用js、css、圖檔等,我們也必須設定Assets Pipeline,請執行下列指令:

$ RAILS_ENV=production bin/rake assets:precompile

但是在production中是不處理靜態檔案的,所以必須在Rails app下的config/environments/production.rb加入以下設定:

config.serve_static_assets = true

如果原本就有且為false,改成true就好。

接下來sudo service nginx restart你應該能從ip看到你的網頁了。