ruby-on-rails
Development

Ruby on Rails 4 でアプリを新規作成してherokuで公開するまで

Railsシリーズ始めて見たいと思います。初回は初心者向けにRailsアプリの新規作成とheorkuへのデプロイを紹介したいと思います。Rubyのインストールについてはこちらの記事で紹介しています。

heroku

heroku(ヘロク)とはPaaSというジャンルのサービスで、Rails等で作ったWebアプリケーションをサーバの設定などを行わずにすぐに公開できるサービスです。
基本的には無料で使えて、本番環境として使う場合は有料プランが推奨されています。

phpならレンタルサーバーを借りて作ったファイルをFTPすれば動かせますが、rubyとなるとVPS等でサーバーの設定をして…とかちょっと面倒ですよね。herokuを使うと、gitリポジトリにpushするだけでWebアプリを公開できるのでとっても楽ちんだし、タダで使えるしいい感じです。

herokuを使うためにはまずアカウントを取得して、heroku toolbeltををインストールします。
サインアップ
https://id.heroku.com/signup
ツールベルト
https://toolbelt.heroku.com/

Rails 4 アプリを作る

今回は特に何もしないアプリケーションを作ります。
まずターミナルを開いてアプリを作るディレクトリに移動して、アプリを格納するディレクトリを作成します。
ここで注意してください。作成するディレクトリ名はRailsアプリのネームスペースになりますので後で後悔しないような名前に!

$ cd path/to/workspace
$ mkdir kozo-sample-rails4

ディレクトリを作成したらそこに移動して、Gemfileを作成します。
Gemfileはbundlerというgemを使うために必要なファイルですが、bundlerがインストールされていない場合は先に入れておきます。

$ gem list | grep bundler
bundler (1.3.5)

↑このような表示になればインストールされていますが、インストールされていない場合は以下を実行してください。

$ gem install bundler --no-ri --no-rdoc

bundlerを使ってGemfileを作成するには以下を実行します。

$ bundle init

Gemfileが作成できたらエディタで開き、gem “rails” の部分のコメントを外します。

# A sample Gemfile
source "https://rubygems.org"

- # gem "rails" 
+ gem "rails"

Gemfileを保存して閉じたらrailsを現在のディレクトリ以下にインストールします。
具体的には path/to/workspace/kozo-sample-rails4/vendor/bundle 以下にインストールされます。

$ bundle install --path vendor/bundle --without production

–without オプションをつけておくと、heorku環境のみに必要なgemはローカル環境でインストールされるのを防ぐことが出来ます

bundle installが終わったら以下のコマンドを実行してRailsアプリのひな形を作成します。

$ bundle exec rails new . --skip-bundle

1つずつ説明していくと、bundle execまでが先ほどbundle installでインストールしたgemを使うことを示しています。
rails new . は現在のディレクトリに新しいrailsアプリのひな形を作成します。–skip-bundleはひな形作成後に自動でbundle installが行われるのを防いでいます。
途中でGemfileを上書きする確認(Overwrite /Users/kozo/tmp/kozo-sample-rails4/Gemfile? (enter “h” for help) [Ynaqdh])がありますが上書きして良いのでそのままエンターキーを押してください。

ひな形が出来たらまたGemfileを開いて、以下の記述を追加します。追加する場所はどこでもOKです。

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

sqlite3がheroku環境にインストールできないようなのでsqlite3の行を以下のように変更します。

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

追加したらbundle installを実行します。(Gemfileを編集したら必ずbundle installを実行しないと意味がないのでセットで行うと覚えておきましょう)

次にProcfileというファイルをGemfile等と同じ場所に作成していかの内容を入れておきます。

web: bundle exec unicorn -p $PORT -c ./config/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

これでherokuに公開するgem等は用意出来たのですが、肝心のトップページがありませんので各箇所に以下の記述を追加します。

config/routes.rb (長いコメントは削除してしまいましょう)

KozoSampleRails4::Application.routes.draw do
  root to: 'pages#home'
end

app/controllers/pages_controller.rb (デフォルトでは用意されていないので作成してください)

class PagesController < ApplicationController
end

app/views/pages/home.html.erb (こちらもデフォルトは用意さていないので作成してください)

<%= Time.now %>

トップページを表示する準備ができたのでサーバーを起動して確認してみます。

$ bundle exec rails s

http://localhost:3000にアクセスして現在時刻が表示されたら成功です。

ここまできたら後はデプロイするだけ!あと一息です。
herokuのデプロイにはgitが必要なのでアプリのディレクトリでgitリポジトリを作成し、最初のコミットを実行します。

$ git init
$ git add .
$ git commit -m "Initial commit"

次にherokuのアプリを登録します。(heorkuコマンドを最初に実行するときはログインが必要です)

$ heroku create kozo-sample-rails4

kozo-sample-rails4の部分はアプリ名ですので作ったアプリの名前に合わせる等してください。kozo-sample-rails4はもう使えませんよ!

herokuにアプリの登録ができたらgit pushを実行します。

$ git push heroku master

ズラズラっとherokuのデプロイログが出力されますので無事終わったら以下のコマンドでブラウザを開きます。

$ heroku open

2014-03-02 08:13:26 +0000 と表示されました!ブラウザをリロードすると時間が進むはずです。

標準