<%= app_name.humanize %>
===

## 系統需求

* Ruby <%= RUBY_VERSION %>
<%- case options[:database] -%>
<%- when 'postgresql' then -%>* PostgreSQL 9.6+
<%- when 'mysql' then -%>* MySQL 5.7+
<%- end -%>
* Node.js 8.0 (以上)

## 環境設定

以下的設定皆以 macOS 為主。

### Homebrew

在 macOS 需要有 [Homebrew](https://brew.sh/index_zh-tw) 來輔助安裝環境。

```bash
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

執行完畢後可以透過 `brew doctor` 確認是否可用。

### Ruby

為了配合多個版本的環境,建議使用 `rbenv` 或者 `rvm` 來管理 Ruby 環境。

```bash
# 選用 rbenv
brew install rbenv

# 選用 rvm
brew install rvm
```

完成後請參考終端機顯示的訊息設定 `.bashrc` 或者其他 Shell 設定檔。

```bash
# 選用 rbenv
rbenv install <%= RUBY_VERSION %>

# 選用 rvm
rvm install <%= RUBY_VERSION %>
```

完成後需要先將 Bundler 安裝到新安裝的 Ruby 環境中(rvm 可能會先預裝完畢)

```bash
# 先確認是否在正確的 Ruby 版本執行
ruby -v
# => ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin17]

gem install bundler
```
<%- case options[:database] -%>
<%- when 'postgresql' -%>
### PostgreSQL

請注意不要直接輸入 `postgresql` 否則會安裝到最新版的 PostgreSQL

```bash
# 安裝
brew install postgresql@9.6

# 啟動伺服器
brew services start postgresql@9.6
```

<%- when 'mysql' -%>
### MySQL

請注意不要直接輸入 `mysql` 否則會安裝到最新版的 MySQL

```bash
# 安裝
brew install mysql@5.7

# 啟動伺服器
brew services start mysql@5.7
```

啟動之前請參考終端機顯示的安裝訊息來初始化 MySQL 資料庫

<%- end -%>
### Node.js

Rails 需要 JavaScript Runtime 一般會使用 Node.js。

```bash
brew install node
```

Webpacker 使用 Yarn 管理安裝的 JavaScript 套件,我們還需要將 Yarn 安裝進來。

```bash
brew install yarn
```

### Rails

請先透過 git 將專案下載到本地端。

```bash
# 切換到專案目錄
cd <%= app_name %>

# 安裝 Rails 所需套件
bundle install

# 設定 git hook
bundle exec overcommit --install
```

Overcommit 會做以下檢查:

1. commit 前:使用 rubocop 檢查語法
2. push 前:使用 brakeman 檢查安全性問題

```bash
# 設定資料庫
bundle exec rake db:create

# 更新資料庫到最新版
bundle exec rake db:migrate
```

<%- if options[:database] == 'mysql' -%>
#### 執行 bundle install 時 mysql2 gem 安裝失敗

這可能是因為我們指定了 MySQL 版本,但是作業系統裡面並不知道有 MySQL 的存在,造成自動安裝失敗。
我們可以透過以下指令手動安裝:

```
# 0.5.2 是目前的版本,之後有更新情參考錯誤訊息指示的版本
export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix openssl)/lib
gem install mysql2 -v 0.5.2 -- --with-mysql-config=$(brew --prefix mysql@5.7)/bin/mysql_config
```

<%- end -%>
## 執行專案

### Rails 伺服器

```bash
# 這是 rails server 的縮寫
rails s
```

開啟後預設可以透過 `http://localhost:3000` 看到網站

#### PendingMigration 錯誤

這是因為最新版本的資料庫已經被更改,但是本機的資料庫還沒有被更新。

```bash
bundle exec rake db:migrate
```

執行 `db:migrate` 指令更新資料庫即可。

<%- if options[:webpack] -%>
### Webpack 伺服器

因為專案使用了 Webpacker 所以需要開啟 Webpack 伺服器來轉換 JavaScript

```bash
./bin/webpack-dev-server
```

和 Rails 伺服器同時打開後,就可以看到正常的網站畫面

<%- end -%>
<%- unless options[:skip_rspec] -%>
### 運行測試

這個專案使用 RSpec 進行測試,可以透過執行以下指令運行

```bash
bundle exec rspec
```

<%- end -%>
### Ruby 語法檢查

這個功能會在 commit 前自動執行,必要時可以手動進行

```bash
bundle exec rubocop
```

### Ruby 安全性檢查

這個功能會在 push 前自動執行,必要時可以手動進行

```bash
bundle exec brakeman
```

### 建立 .env 檔案

建立 `.env` 檔案,並依據 local 開發環境需求修改設定內容。

```bash
cp .env.example .env
```

<%- if options[:capistrano] -%>
## 部署

這個專案使用 Capistrano 進行部署,請先確定有權限透過 `deployer` 帳號 SSH 到伺服器上。

```bash
cap [ENV] deploy
```

假設要部署到測試(Staging)環境,請使用以下指令

```bash
cap staging deploy
```

如果是正式環境,則使用以下指令

```bash
cap production deploy
```

過程中會詢問要使用的 Git Branch,預設為 master branch,如果需要測試某個 Git Branch 請先將他上傳到 GitHub 上,並且和團隊成員確認後手動輸入 branch 再進行部署跟測試。
<%- end -%>