書籍転載:Ruby on Rails 4アプリケーションプログラミング

書籍転載:Ruby on Rails 4アプリケーションプログラミング

Apache+Passenger環境/Heroku環境への、Railsアプリの配置

2014年6月17日

書籍転載の最終回。開発したRailsアプリを本番環境へ配置する方法について説明する(「Part 3《応用編》 第10章 Railsの高度な機能」より)。

  • このエントリーをはてなブックマークに追加

書籍転載について

 本コーナーは、技術評論社発行の書籍『Ruby on Rails 4アプリケーションプログラミング』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 『Ruby on Rails 4アプリケーションプログラミング』の詳細や購入は技術評論社のサイト目次ページをご覧ください。

ご注意

本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。

 前回は、Sass(SCSS)の基礎について解説しました。今回は最終回として、開発したRailsアプリを本番環境へ配置する方法について説明します。

10.5 本番環境への移行

 Rails(Ruby)では、デフォルトでWEBrickというHTTPサーバを提供しており、Railsをインストールしただけで、最低限、Railsアプリケーションを手元で動作できるようになっています(本書サンプルもWEBrick環境で動作を検証しています)。

 もっとも、WEBrickはあくまで導入の簡単さを追求した環境ですので、本番環境で利用するには力不足です。本番環境では、ThinやUnicorn、Apache HTTP Server+Phusion Passenger(以降、Apache+Passenger)のような専用サーバを利用する必要があるでしょう。また、昨今ではRailsアプリケーションを手軽にアップロード&動作できるHerokuのようなクラウドサービスも提供されています。

 以下では、本番環境移行への指針として、Apache+Passenger、Heroku環境への移行の手順を紹介します。

10.5.1 Apache+Passenger環境への配置

 Passengerは、Apacheに組み込めるRailsアプリケーション実行のためのモジュールで、比較的手軽に導入できるのが特長です。ただし、Passengerは執筆時点ではWindows環境では動作しませんので要注意です。以下でもLinux環境を前提に解説を進めます。

1Apache HTTP Serverをインストールする

 Passengerを導入するに先立って、まずはApacheと(データベースサーバとして)MySQLをインストールしておきましょう*37。データベースについては本文と同じくSQLiteを利用することもできますが、本格的な運用にはやや機能不足です。Passengerへの移行と合わせて、データベースも移行してしまいましょう。

  • *37 もちろん、1.2節の手順に従ってRails環境が準備されているのは大前提です。

 ApacheとMySQLそのもののインストール方法については、本書の守備範囲からも外れますので、ここでは割愛します。詳しい手順は著者サポートサイト「サーバサイド技術の学び舎 - WINGS」から[サーバサイド環境構築設定]などを参考にしてください。本項では、Apache 2.4.6とMySQL 5.5.33aがインストールされていることを前提に、以降の解説を進めていきます。

2Passengerをインストールする

 Passengerのインストールそのものは、ごくシンプルな手順で行えます。

コンソール
# gem install passenger  ……Passengerのインストール
Fetching: daemon_controller-1.1.7.gem (100%)
Successfully installed daemon_controller-1.1.7
Fetching: passenger-4.0.26.gem (100%)
Building native extensions. This could take a while...
Successfully installed passenger-4.0.26
…中略…
2 gems installed

# passenger-install-apache2-module   ……Apacheモジュールとしてインストール

 インストールそのものは、Enterキーを押していくだけで先に進められます。インストールに成功すると、あとからhttpd.confの編集に利用するためのコードが表示されますので、コピーして控えておくと良いでしょう(図10-14)。

図10-14 Passengerのインストールに成功
3httpd.confを編集する

 Apacheの設定ファイルhttpd.confに対して、手順2でコピーしておいたコードを追加します。また、ApacheのドキュメントルートをRailsアプリケーションの/publicフォルダに設定しておきましょう(リスト10-55)。

ApacheConf
# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.26/buildout/apache2/
mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.26
PassengerDefaultRuby /usr/local/bin/ruby
…中略…
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.

DocumentRoot "/var/www/html/railbook/public"
リスト10-55 httpd.conf

【NOTE】root権限では動作できない

 Passengerは、root権限でRailsアプリケーションを動かせない仕様になっています。Railsではconfig.ruの所有者がそのままアプリケーションの実行ユーザになりますが、これがrootの場合、nobodyユーザで動作するように自動的に切り替わります。この場合、logフォルダやtmpフォルダなどでの書き込みができずにエラーとなってしまうのです。

 もしそのようになっている場合には、以下のようなコマンドで所有者を変更してください(ここではグループはwings、ユーザはyyamada)。

コンソール
chown -R yyamada:wings /var/www/html/railbook/public
4mysql2アダプタをインストールする

 続いて、アプリケーションからMySQLを利用するための手続きを進めます。

 まずは、MySQLデータベースに接続するためのmysql2アダプタをインストールします。railbookアプリケーションのGemfileをリスト10-56のように編集してください。

Gemfile
gem 'sqlite3'
gem 'mysql2'
リスト10-56 Gemfile

 この状態で、bundle installコマンドを実行します*38

コンソール
# bundle install

Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...
Using rake (10.1.0)
…中略…
Using
on (1.8.1)
Installing mysql2 (0.3.14)
Using tilt (1.4.1)
…中略…
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
  • *38 mysql2アダプタのインストールには、MySQLの開発ライブラリが必要です。未インストールの場合には、「# yum install mysql-devel」のようにインストールしてください。
5データベース設定ファイルを編集し、データベースを展開する

 データベース設定ファイルdatabase.ymlを編集し、本番環境からMySQLに接続するための接続情報を定義します(リスト10-57)。もちろん、ユーザ名やパスワード、データベース名などは、適宜、自分の環境に合わせて修正してください。

YAML
production:
  adapter: mysql2
  encoding: utf8
  database: railbook
  pool: 5
  username: root
  password: 12345
  socket: /var/lib/mysql/mysql.sock
リスト10-57 database.yml

 あとは、以下のrakeコマンドを順番に実行し、データベースの作成からスキーマの構築、フィクスチャの展開までを行うだけです*39

コンソール
# rake db:create RAILS_ENV=production  ……データベースの作成

# rake db:migrate RAILS_ENV=production  ……マイグレーションの実行
== CreateBooks: migrating ====================================================
-- create_table(:books)
  -> 0.1449s
== CreateBooks: migrated (0.1451s) ===========================================

== CreateAuthorsBooks: migrating =============================================
-- create_table(:authors_books)
  -> 0.1246s
== CreateAuthorsBooks: migrated (0.1248s) ====================================

…中略…
== CreateJoinTableAuthorBook: migrated (0.0904s) =============================

# rake db:fixtures:load RAILS_ENV=production  ……フィクスチャの展開
  • *39 フィクスチャは、本来テストデータを表すものですが、ここではとりあえず動作の確認用に利用させてもらいましょう。
6アセットを事前コンパイルする

 本番環境ではデフォルトで、アセットの自動コンパイル機能が無効になっています。rakeコマンドで、アセットを事前コンパイルしておく必要があります。

コンソール
# rake assets:precompile
7アプリケーションの動作を確認する

 以上で、Apache+PassengerとMySQLの環境でRailsアプリケーションの動作が可能になりました。最後に、次のアドレスからrailbookアプリケーション(本書で作成したアプリケーション)にアクセスできることを確認してください。

 図3-1(転載対象外)のような結果が得られれば、環境は正しく設定できています。

  http://localhost/books

10.5.2 Heroku環境への配置

 Herokuとは、Railsアプリケーションをホストできるクラウドサービスの一種です。一定の範囲内までであれば無償で利用できますので、まずは試してみたいという場合にも気軽に導入できます。わずかなコマンド操作で、既存のアプリケーションも簡単にデプロイできる点も、急速に人気を集めた理由のひとつでしょう。

 以下では、Windows環境での操作を前提に手順を説明しますが、Linux環境でもパスが異なる他は同じ手順で操作できます。

1Gitをインストールする

 Herokuを利用するには、ソースコード管理ツールであるGitが必要です*40

 ダウンロードページからソースコード、またはバイナリを入手して、インストールしてください。

 Windows環境であれば、Git-1.8.4-preview20130916.exeをダウンロードします。ダウンロードしたファイルをダブルクリックして、ウィザードに沿っていくだけでインストールできます。途中、[Adjusting your PATH environment]画面(環境変数PATHの設定)では「Run Git from the Windows Command Prompt」(コマンドプロンプトからGitコマンドを実行)をチェックしてください。

 Gitをインストールできたら、以下の要領で、SSHの公開鍵を作成してください。

 これは、あとからHerokuを操作する際に必要となるものです。途中、鍵の保存先を聞かれますので、「C: \Users\<ユーザ名>\.ssh\id_rsa」のようなパスを入力してください。

コンソール
> cd C:\Users\<ユーザ名>
> mkdir .ssh
> cd C:\Program Files (x86)\Git\bin
> ssh-keygen
2Herokuを利用するためのアカウントを準備する

 Herokuを利用するには、まず、Sign Upページからユーザ登録を行ってください。メールアドレスを入力すると、メールアドレスが送信されてきますので、メール本文に記載されたURLにアクセスし、パスワードの登録を行います。

 アカウントを作成中である旨の画面が表示された後、[heroku dashboard]画面が表示されます。ページ右肩の▼をクリックして、[Account]リンクをクリックします。アカウント管理画面が表示されたら、[Billing](請求先)の[Add Credit Card]ボタンをクリックし、移動先の画面で必要な請求情報を入力してください。これは、あとからアドオンをインストールするために必要な手続きです(よって、アドオンが不要な場合にはこの作業は不要です)。

3デプロイの前準備を行う

 アプリケーションをHerokuにデプロイする前に、いくつかの準備を済ませておきます。

1Heroku APIの導入

 Heroku APIは、Herokuへのデプロイからメンテナンスモードへの切り替え、ログの取得など、Herokuを管理するためのライブラリです。gemコマンドで導入できます。

コンソール
> gem install heroku
2Herokuに鍵を登録する

 以下のコマンドで、Herokuに作成済みの公開鍵を登録しておきます。コマンドを実行すると、メールアドレス/パスワードを聞かれますので、先ほどユーザ登録で設定した情報を入力してください。

コンソール
> heroku keys:add
3アセットを準備する

 production環境ではデフォルトで、アセットの自動コンパイル機能(9.2.2項)が無効になっています。rakeコマンドで、アセットを事前コンパイルしておく必要があります。

コンソール
> cd c:\data\railbook
> rake assets:precompile

 また、production環境では、デフォルトでアセットの配信が無効になっています。production.rbを以下のように編集しておきましょう。

Ruby
config.serve_static_assets = true
リスト10-58 production.rb
4pgライブラリをインストールする

 Herokuでは標準でPostgreSQLデータベースを提供しています。PostgreSQLに接続するために、アプリケーション側でもGemfileを有効にし、pgライブラリを有効にしておきましょう。SQLiteは使えないのでコメントアウトしておきます。

Gemfile
# gem 'sqlite3'
gem 'pg'
リスト10-59 Gemfile

 Gemfileを更新したら、bundle installコマンドも実行しておきます。

4アプリケーションをHerokuにデプロイする

 Herokuでは、Git経由でアプリケーションを登録しますので、あらかじめアプリケーションをGitの管理下に配置してください。

コンソール
> cd c:\data\railbook
> git init
> git add .
> git commit -m "Railbook Init"

 「Please tell me who you are.」と表示される場合は、以下のようにメールアドレスとユーザ名を指定して、再度コマンドを入力してください。

コンソール
> git config --global user.email "メールアドレス"
> git config --global user.name "ユーザー名"
> git commit -m "Railbook Init"

 あとは、以下のようにherokuコマンドでアプリケーションの作成から登録、マイグレーションなどを行います。

コンソール
> heroku create                       ……Herokuにアプリケーションを作成
> heroku addons:add sendgrid:starter  ……メール送信アドオンを登録
> git push heroku master              ……アプリケーションをHerokuにデプロイ
> heroku run rake db:migrate          ……マイグレーションを実行
> heroku run rake db:fixtures:load    ……フィクスチャを展開
5アプリケーションの動作を確認する

 デプロイに成功したら、Herokuの管理ページにアクセスしてください。

図10-15 Herokuのアプリケーション管理画面

 表示されているintense-brushlands-1904のようなアプリケーション名は自動で生成されたものなので、その時どきで異なります(名前はあとから変更することもできます)。アプリケーション名に応じて「http://intensebrushlands-1904.heroku.com/books」のようなURLで、ブラウザから正しくアクセスできることを確認しておきましょう。

 以上で書籍転載は完結です(全11本)。

※以下では、本稿の前後を合わせて5回分(第7回~第11回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

7. Railsの設定情報

「第1章 イントロダクション」~「第2章 Ruby on Railsの基本」までの転載が完了。まとめて読んでRails開発を学ぼう。

8. CoffeeScript入門(前編) ― CoffeeScriptの基本構文

Rubyプログラマーの必須知識「CoffeeScript」の基礎として、基本構文/変数とリテラル表現/演算子/制御構文を解説。書籍転載の8本目(「Part 3《応用編》 第9章 クライアントサイド開発」より)。

9. CoffeeScript入門(後編) ― 関数/オブジェクト指向構文/即時関数

CoffeeScriptの基礎を解説。今回は関数/オブジェクト指向構文/即時関数について説明する(書籍転載の9本目)。CoffeeScriptをマスターしよう。

10. Sass(SCSS)入門

CSSのコードを生成するための言語「Sass(SCSS)」の基礎として、基本的な使い方/スタイル定義のネスト/変数/演算子/関数/ディレクティブ/について解説。書籍転載の10本目(「Part 3《応用編》 第9章 クライアントサイド開発」より)。

11. 【現在、表示中】≫ Apache+Passenger環境/Heroku環境への、Railsアプリの配置

書籍転載の最終回。開発したRailsアプリを本番環境へ配置する方法について説明する(「Part 3《応用編》 第10章 Railsの高度な機能」より)。

イベント情報(メディアスポンサーです)

サイトからのお知らせ

Twitterでつぶやこう!