部署你的 rails 應用程式至 Heroku

Heroku 是一個 platform as a service 平台,可以部署專案在此,使用上非常方便的,當然方便的代價是價格,他的單位計算資源價格會高於 AWS。

安裝 heroku-cli

https://devcenter.heroku.com/articles/heroku-cli

1
2
# 將 heroku 加入 brew 的來源
brew tap heroku/brew && brew install heroku

登入 Heroku 帳號

1
heroku login

一般我們使用 git 來部署應用程式至 Heroku,在下個步驟前,確認你的專案已經使用 git 做版本控制了。

設定 git remote

新建一個專案叫 app_name:

1
heroku create app_name

已經在Heroku 上建立專案了則使用:

1
2
# set git remote heroku to https://git.heroku.com/app_name.git
heroku git:remote -a app_name

設定 Rails app

使用 Postgres 作為資料庫,將下列這行加入 Gemfile :

1
2
# Gemfile
gem 'pg'

設定資料庫連線資訊:

1
2
# config/database.yml
production: url: <%= ENV['DATABASE_URL'] %>

config/environments/production.rb 中對 assets 與 log 做設定

1
2
# config/environments/production.rb
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?if ENV["RAILS_LOG_TO_STDOUT"].present? logger = ActiveSupport::Logger.new(STDOUT) logger.formatter = config.log_formatter config.logger = ActiveSupport::TaggedLogging.new(logger)end

指定使用的 Ruby 版本,新增檔案 .ruby-version填入:

1
2
# .ruby-version
ruby-2.6.0

在專案的根目錄下建立一個 Procfile 檔案 ($ touch Procfile),並填入以下內容:

1
2
3
# Procfile
web: bundle exec puma -C config/puma.rb
sidekid: bundle exec sidekiq -C config/sidekiq.yml

設定 Heroku

Heroku 管理介面 > app_name > Settings > Reveal Config Vars,DATABASE_URL 這個環境變數,填入的是你的 production database 的連線位址與帳號密碼,Heroku 會預設幫你填入他提供的 Postgres 資料庫。

接著 Add buildpack,加入 heroku/nodejs buildpack 並放在 heroku/ruby 之前:

有需要 node_modules 者才需要做這個步驟

部署

在部署前 git commit 把要部署的專案放置在 master 分支下,然後:

1
2
# push master 分支到 heroku remote
git push heroku master

有新的 database migrations 時執行:

1
2
# heroku run + 要運行的指令,這次要做 database migrate
heroku run rails db:migrate
作者

楊竑昕

發表於

2019-06-11

更新於

2023-04-03

許可協議

評論