-
Notifications
You must be signed in to change notification settings - Fork 13
Rails 佈署虛擬機使用 Ubuntu 14.04、Nginx、Passenger
終端機輸入指令:
$ 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
可選擇使用rbenv或RVM。這裡的機器是使用rbenv,不過部署上差別應該只在於Passenger使用Ruby的路徑。
選擇mysql或postgresql,記得搭配對應的gem、更改Rails的database.yml
。
可看過本篇再參考ihower和Motion Express的教學文章。
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
這裡選擇1
這是設定安裝路徑,可以直接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看到以下畫面表示安裝成功:
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:
-
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看到你的網頁了。