2011年11月13日日曜日

Railsを使ったアプリケーション開発 (その1 事前準備編)

Rails4を利用して書籍を管理するアプリケーションを作ることを目的とする。


Ruby on Railsのインストール

# yum install ruby ruby-devel
# gem install rails



Apacheのインストール
# yum install httpd httpd-devel



SQLのインストール
● SQLliteを使う場合(今回は利用しない。インストールだけ)
# yum install sqlite sqlite-devel

● MySQLを使う場合

# yum install mysql mysql-server mysql-devel



バージョン確認

# ruby -v

# rails -v

# httpd -v

# sqlite3 -version

# mysql --version



Apacheの設定

Apacheに組み込むRailsアプリケーション実行モジュール(Passenger)をインストールしておく。

● Passengerのインストール

# gem install passenger

● Apacheモジュールとしてインクルード

# passenger-install-apache2-module

インクルードが成功するとApacheの設定ファイルに記載するコードが表示される。

LoadModule passenger_module /usr/local/share/gems/gems/passenger-5.0.7/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/share/gems/gems/passenger-5.0.7
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>


<VirtualHost *:80>
   ServerName www.yourhost.com
   # !!! Be sure to point DocumentRoot to 'public'!
   DocumentRoot /somewhere/public
   <Directory /somewhere/public>
      # This relaxes Apache security settings.
      AllowOverride all
      # MultiViews must be turned off.
      Options -MultiViews
      # Uncomment this if you're on Apache >= 2.4:
      #Require all granted
   </Directory>
</VirtualHost>


● Apacheの設定

# vi /etc/httpd/conf.d/passenger.conf

# LoadModule、PassengerRoot、PassengerRubyは上記をそのままコピーする。

LoadModule passenger_module /usr/local/share/gems/gems/passenger-5.0.7/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/share/gems/gems/passenger-5.0.7
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>


# 任意だがPassengerが追加するHTTPヘッダを削除するための設定をいててもよい。

Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# こちらも任意だが必要に応じてPassengerのチューニングのための設定を追加しておく。

# ※詳しくは Phusion Passenger users guide
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerHighPerformance on
PassengerStatThrottleRate 10
PassengerSpawnMethod smart
RailsAppSpawnerIdleTime 86400
PassengerMaxPreloaderIdleTime 0

DocumentRootの指定先フォルダは後程作成する(そのためまだhttpdは起動しない)。

RailsEnvはdevelopment(開発)、test(試験)、production(本番)を指定できる。Railsの環境は3つを使い分けられるが、さしあたりdevelopmentでいいだろう。

RailsEnv development

<VirtualHost 192.0.2.1:80>
   ServerName bookapp.example.com
   DocumentRoot "/var/www/rails/bookapp/public"
   <Directory /var/www/rails/bookapp/public>
      AllowOverride all
      Options -MultiViews
   </Directory>
</VirtualHost>



アプリケーションの作成

書籍を管理するアプリケーションを作成していくとは述べたとおりである。
/var/www/rails/配下に、bookappというアプリケーションを新規に作成する。

mysqldをここで立ち上げておく。

# systemctl restart mysqld.service
# mysqladmin -u root password "***"

DocumentRootで指定したディレクトリを作成する。

# mkdir -p /var/www/rails/

Passengerはroot権限でRailsアプリケーションを動かせない仕様になっているので、
オーナーを変更しておく。
# chown -R apache.apache /var/www/rails/

# cd /var/www/rails/

ディフォルトで利用するSQLはsqliteなのだが、今回はmysqlを利用することにしよう。
そのため'-d'オプションでmysqlを付与している。
# rails new bookapp -d mysql

# cd bookapp

dbアクセス用のパスワードを記載するぐらいで、ディフォルトで使える。

# vi ./config/database.yml
〜snip〜
username: root
password: ***
〜snip〜

database.ymlファイルに基づいてデータベースを作成する。development、test、production用の3つができるはずである。どのデータベースを使うかは先に書いた通り、passenger.confのRailsEnvで指定する。
# rails db:create

個別に指定もできる。

# rails db:create RAILS_ENV=production
createをdropにするとデータベースを削除できる。

dbをのぞいて見る。

# rails dbconsole

これは下と同じである。

# mysql -u root

> show databases;
+---------------------+
| Database            |
+---------------------+
| bookapp_development |
| bookapp_test        |
| bookapp_production  |
+---------------------+

確かにできている。



(補足1)

今回作成するのアプリケーションで必要となるgemは同フォルダのGemfileで定義されている。bundlerと呼ばれるアプリケーションごとのパッケージ管理システムにより、アプリケーションごとにgemを管理できる。

パッケージ管理の一般的な利用例をまず見てみる。
$ vi test.rb
require 'hogepiyo'

$ vi Gemfile
source 'https://rubygems.org'
gem 'hogepiyo'

$ bundle install --path=vendor/bundle

$ ls vendor/bundle/ruby/gems/hogepiyo-x.x.x/

Gemfileを修正した場合は、bundleコマンドで読み直しさせること。
$ bundle update

実行する。
$ bundle exec ruby test.rb

イメージがついただろう。
アプリケーションを実行するrailsのバージョンを指定することもできる。
$ vi Gemfile
gem 'rails', '3,2,13'



◆ 確認

httpdを起動させる。
# systemctl restart httpd.service

ブラウザからアクセスして確認する。

http://x.x.x.x/
DocumentRootで指定した、/var/www/rails/bookapp/public 配下のindex.htmlが読み込まれる。

"Welcome aboard" と出ていれば成功である。
"About your application's environment" をクリックしアプリケーション環境に問題ないかも確認しておこう。



ここからコントローラ、ビュー、モデルと作成していくのだが、それはまた次回の

Railsを使ったアプリケーション開発 (その2 基礎編)で。