Cloud Foundry v2系サービスにRailsアプリをデプロイする


**環境**

- Ruby 2.1.2
- Rails 4.1.1

Cloudn PaaS

- gud version: 6.0.1-cloudn.1
- API version: 2.0.0
- PostgreSQL 9.2

Bluemix

- gud version: 6.0.2-96d242f
- API version: 2.2.0
- PostgreSQL 9.1

**前提**

- [4.1. デプロイする — Cloudn PaaS v2 ドキュメント](http://info.cloudn-service.com/documents/JP/ejp/paas-v2/deploy/deploy.html)
- 上記の経験または同等の知識を有する

**サンプル**

- https://github.com/usutani/blog_cfv2

**参考**

- [Deploying a Rails App to CloudFoundry - Pivotal Labs](http://pivotallabs.com/deploying-a-rails-app-to-cloudfoundry/)
- [Cloud Foundry Environment Variables | Pivotal CF Docs](http://docs.run.pivotal.io/devguide/deploy-apps/environment-variable.html)
- [Rails 4 on Heroku | Heroku Dev Center](https://devcenter.heroku.com/articles/rails4)
- [Getting started with PostgreSQL service | IBM Bluemix Docs](https://www.ng.bluemix.net/docs/#services/PostgreSQL/index.html)

# アプリの作成

```bash
rails _4.1.1_ new blog_cfv2
cd blog_cfv2
rails g scaffold Post title body:text
```

```ruby:db/seeds.rb
1.upto(5) do |i|
  Post.create(title: "title #{i}", body: "body #{i}")
end
```

```bash
rake db:migrate db:seed
```

```ruby:config/routes.rb
Rails.application.routes.draw do
  resources :posts
  root 'posts#index'
end
```

```bash
rails s
```

# デプロイの準備

追加・編集するファイルは次の通り：

- .cfignore
- Gemfile, Gemfile.lock

1.ファイル.cfignoreを作成し、プッシュしないファイル・ディレクトリを記述する。

```.cfignore
tmp/
log/
```

2.Gemfileファイルを修正、必要なgemを追加する。

- [pg](https://rubygems.org/gems/pg)
- [rails_12factor](https://rubygems.org/gems/rails_12factor)

```ruby:Gemfile
source 'https://rubygems.org'

gem 'rails', '4.1.1'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

gem 'spring', group: :development
gem 'sqlite3', group: [:development, :test]

group :production do
  gem 'pg'
  gem 'rails_12factor'
end
```

```bash
bundle
```

# デプロイ

1.サービス（PostgreSQL）を作成する。

- marketplaceで、現在利用可能なサービスを確認できる。
- create-serviceで、サービスを作成できる。
- servicesで、生成済みサービスを確認できる。

```bash
gud marketplace
gud create-service postgresql default blog-postgres
gud services
```

2.アプリをプッシュし、サービスとバインドする。

```bash
gud push blog_cfv2 --no-start
gud bind-service blog_cfv2 blog-postgres
gud services
```

3.環境変数を設定する。

```bash
gud set-env blog_cfv2 SECRET_KEY_BASE `rake secret`
gud env blog_cfv2
```

4.データベースをマイグレートしてサーバを起動する。

```bash
gud push -c 'bundle exec rake db:migrate db:seed && bundle exec rails s -p $PORT' blog_cfv2
gud logs blog_cfv2 --recent
gud apps
```

**エイリアス版**

```bash
gud m
gud cs postgresql default blog-postgres
gud s
gud p blog_cfv2 --no-start
gud bs blog_cfv2 blog-postgres
gud s
gud se blog_cfv2 SECRET_KEY_BASE `rake secret`
gud e blog_cfv2
gud p -c 'bundle exec rake db:migrate db:seed && bundle exec rails s -p $PORT' blog_cfv2
gud logs blog_cfv2 --recent
gud a
```

# Bluemix
create-serviceのdefaultを100に変更する。

```bash
cf m
cf cs postgresql 100 blog-postgres
cf s
cf p blog_cfv2 --no-start
cf bs blog_cfv2 blog-postgres
cf s
cf se blog_cfv2 SECRET_KEY_BASE `rake secret`
cf e blog_cfv2
cf p -c 'bundle exec rake db:migrate db:seed && bundle exec rails s -p $PORT' blog_cfv2
cf logs blog_cfv2 --recent
cf a
```