Cloud9にRails (postgresql + postgis) の開発環境を構築する

# 概要
緊急時の開発環境に使えるようにCloud9をセットアップしたので紹介。

# 構築した環境
ざっくりと以下の感じ
* ruby 2.3.1
* rails
* postgresql + postgis

# 手順
## プログラムのアップデート・インストール
色々プログラムのバージョンが古かったり、入っていなかったりするのでそれらをアップデートおよびインストールする。
### apt-getをアップデート

```
sudo apt-get update
```

### rubyをアップデート
`ruby --version` で見たところ versionが2.3.0だったので、ちょっとだけアップデートした。

```
rvm upgrade 2.3.0 2.3.1
```

### postgresqlとpostgisインストール

```
sudo apt-get install postgresql libpq-dev language-pack-ja
sudo apt-get install -y postgis postgresql-9.3-postgis-2.1
```

* postgresql を起動する。

```
sudo service postgresql start
```

## 既存のリポジトリをクローンする

bitbucketで管理しているリポジトリをクローンする。

参考：[Bitbucketのリポジトリをクローンする](http://kazsoga.com/bitbucket-repository-clone/) 

```
git clone https://xxxxx@bitbucket.org/yyyyy/zzzzz.git
```

## Rails関連の設定
### database.ymlにあわせたpostgresqlの設定をする
* 対象となるdatabase.ymlの記述例は以下の通り

```config/database.yml
development:
  host: db
  database: database_dev
  encoding: utf8
  username: appuser
  password: apppass
  adapter: postgis
  pool: 4
  timeout: 7000
```

#### ホスト名の追加
* ホスト名 dbでpostgresqlにアクセスできる用にする。listen_addressに __db__ を追加する


```/etc/postgresql/9.3/main/postgresql.conf 
------------------------------------------------------------------------------                                                                                                                     
# CONNECTIONS AND AUTHENTICATION                                                                                                                                                                    
#------------------------------------------------------------------------------                                                                                                                     
# - Connection Settings -                                                                                                                                                                           

#listen_addresses = 'localhost,db'      # what IP address(es) to listen on;                                                                                                                         
                                        # comma-separated list of addresses;                                                                                                                        
                                        # defaults to 'localhost'; use '*' for all                                                                                                                  
                                        # (change requires restart)                                                                                                                                 
```

* ホスト名がdbの時、localhostと同じIPにアクセスできるようにする。ただし、 __インスタンスが作り直される時に消えてしまうので、その都度入れ直す必要あり。__

```/etc/hosts 
127.0.0.1 localhost
127.0.0.1 db
```

#### postgresqlへデータベースの追加
* postgresqlを起動し、ユーザーを追加する

```
sudo -u postgres psql
```

```postgresql
# CREATE USER appuser WITH PASSWORD 'apppass';
# ALTER ROLE appuser SUPERUSER;
# CREATE DATABASE 'database_dev' encoding 'UTF-8' TEMPLATE template0 owner appuser;
# ALTER ROLE appuser WITH CREATEDB;
Ctrl-D
```

#### postgresqlへpostgisアダプタの追加

```
sudo -u postgres psql -d database_dev
```

```postgresql
# CREATE EXTENSION postgis;
Ctrl-D
```

#### postgresqlへUTF-8を登録する

```
# CREATE COLLATION "ja_JP.utf8" (LOCALE = 'ja_JP.UTF-8');
```

### git情報の登録
git用にのnameとemailを登録する。（参考：[リポジトリごとに user.name や user.email の設定を強制する](http://qiita.com/uasi/items/a340bb487ec07caac799)）

```
git config user.name "username"
git config user.email "user@email.com"
```

### railsの起動
* ふつうにgem入れたりmigrationしたりseedを入れたりする。

```
gem install bundler
bundle install
rake db:migrate
rake db:seed
rails server -b $IP -p $PORT
```

# うまくいかないとき
* postgresqlを起動、再起動する

```
sudo service postgresql start
```

もしくは

```
sudo service postgresql restart
```

* cloud 9を再起動する
[Cloud9 再起動する方法](http://americandog1993.hatenablog.jp/entry/2017/04/29/145159)

以上