簡介

本篇文章說明如何將開發好的Rails網站程式部署到Heroku平台上,並包含Production與Staging兩種環境。

環境

Mac OS

Rails 4

Git: 假設repo裡面已有兩個branch: production和staging,分別部署至production與staging兩種環境

 

步驟

1. 申請Heroku帳號

先到Heroku申請賬號

 

2. 安裝Heroku toolbelt

接著到這裡下載安裝Heroku toolbelt

 

3. 登入Heroku

開啓終端機輸入

# heroku login

並輸入帳號密碼完成登入

 

4. 建立SSH key

# ssh-keygen -t rsa

都按Enter直接用預設值即可

 

5. 加入SSH key

# heroku keys:add

 

6. 複製環境設定

進入專案目錄下執行

# cp config/environments/production.rb config/environments/staging.rb

7. 設定databasee.yml

編輯config/databasee.yml,設定如下

development:
  adapter: "mysql2"
  database: "db"
  host : "127.0.0.1"
  encoding : "utf8"
  username : "username"
  password : "password"

test:
  adapter: "mysql2"
  database: "db_test"
  host : "127.0.0.1"
  encoding : "utf8"
  username : "username"
  password : "password"

staging:
  adapter: postgresql
  encoding: unicode
  pool: 5

production:
  adapter: postgresql
  encoding: unicode
  pool: 5

我採用的是本機開發使用mysql,部署到heroku使用postgresql,因為heroku只支援postgresql

 

8. 加入unicorn.rb

建立config/unicorn.rb,設定如下

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

 

9. 建立Procfile

建立Procfile,設定如下

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

部署的環境採用unicorn作為Web server以提供更好的效能

 

10. 編輯Gemfile

編輯Gemfile,設定如下

group :test, :development do
  gem 'mysql2'
end

group :staging, :production do
  gem 'pg'
  gem 'unicorn'
end
最後一行加入
ruby "2.1.1"

如果沒有加入也可以,heroku目前會自動使用ruby 2.0.0版本執行

 

11. 建立heroku app

於專案目錄下執行:

# heroku apps:create app-staging-name -r staging
# heroku apps:create app-production-name -r production

其中app-production-name和app-staging-name是你要在Heroku上建立的app名稱,後面的production和staging是要在repo建立的remote名稱

 

12. 部署

# git push staging staging:master
# heroku run rake db:migrate --app app-staging-name

 

# git push production production:master
# heroku run rake db:migrate --app app-production-name

 

13. 設定staging環境變數

進入Heroku後台,在Staging的App設定中找到[Reveal config vars]的按鈕按下取得環境變數

螢幕快照 2014-06-22 下午12.24.36

接著將production的字樣改成staging就可以了

螢幕快照 2014-06-22 下午12.25.52

 

文章標籤
創作者介紹

小殘的程式光廊

emn178 發表在 痞客邦 PIXNET 留言(0) 人氣()