Rails2.3でデータベースMySQLを使用する場合のTipsあれこれ


Railsプロジェクトの名前がggrksだと仮定する.



事前のデータベース作成

Railsプロジェクトを作成する前に,データベースggrks_developmentを作成しておかないとダメ.
$ mysqladmin -u admin create ggrks_development


Railsプロジェクトの作成
$ rails -d mysql ggrks
Aptana RadRailsを使っている場合は,[ファイル]->[新規]->[RailsProject]の窓で,databaseとしてmysqlを選べばよい.


  database.ymlの書き換え

{RailsRoot}/config/database.ymlを編集し,usernameエントリをすべてadminに変更する.


 WEBrickの使用

Railsで用意されているwebサーバは MongrelとWEBrickがある.通常は速い&軽いMongrelが起動されるが,Mongrelだとrootで接続しようとしてInternal Server Errorとなる.
database.ymlのusernameエントリをすべてrootに変更&正しくpasswordエントリを記述してもダメ.
そこでWEBrickを使うことにする.
コマンドラインでWEBrickを起動する場合
ruby script/server webrick
Aptana RadRailsの場合
1. Serversビューにて,ggrksのサーバを止める.
2. ggrksのサーバを右クリック->[Edit server]
3. TypeをWEBrickに変更.
4. ggrksのサーバを右クリック->[Start server]

RailsアプリをApacheで動かすためのモジュール.



入手

# apachectl stop
# gem install --no-ri --no-rdoc passenger



環境変数の設定

Apacheをソースからインストールしたので,passenger設定時にパスが見つからずエラーが出るので,以下を実行
# export HTTPD=/usr/local/apache2/bin/httpd
# export APXS2=/usr/local/apache2/bin/apxs
# export PATH=/usr/local/apache2/bin/:$PATH



設定

# passenger-install-papche2-module
Apacheがpassengerモジュールをロードするための設定およびバーチャルホストの設定例が表示されるので,メモっておく


# emacs /usr/local/apache2/conf/httpd.conf
passengerモジュールをロードするように,メモに従って,ファイルの末尾に以下を追加.
	LoadModule passenger_module /usr/local/lib/ruby/gems/XX/gems/passenger-XXX/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/XX/gems/passenger-XXX
PassengerRuby /usr/local/bin/ruby
RailsEnv development
4行目のエントリは,RailsEnvのデフォルトがproductionになっているから.


バーチャルホストでの運用は,DNSに手を入れないとダメくさいので,以下に示す方法にて運用する.



複数のユーザによる複数のRailsアプリをホスティングするための設定
今,ユーザhirochikaが作ったRailsアプリが/home/hirochika/hogeにあり,そのコントローラ名がpeopleであったとする.
さらに,ユーザhirokoが作ったRailsアプリが/home/hiroko/hogehogeにあり,そのコントローラ名がpersonであったとする.
MongrelやWebrickでこれらを表示するなら
http://ホスト名:ポート番号/people/
http://ホスト名:ポート番号/person/
のようになる場合に,これらをApache2+passengerでホスティングすることを考える.


DocumentRootの作り直し
# cd /usr/local/apache2
# mkdir html
# chmod a+w html


シンボリックリンク作成
ユーザhirochikaおよびhirokoのホームディレクトリのパーミッションが755であることを確認し,各ユーザがDocumentRootにシンボリックリンクを作成する
hirochika$ cd /usr/local/apache2/html
hirochika$ ln -s /home/hirochika/hoge/public hoge
hiroko$ cd /usr/local/apache2/html
hiroko$ ln -s /home/hiroko/hogehoge/public hogehoge


httpd.confの編集とサーバ再起動
# emacs /usr/local/apache2/conf/httpd.conf
DocumentRootを変更したので,まずはそれを反映させる
		DocumentRoot "/usr/local/apache2/html"
つぎに,そのディレクトリへのアクセス設定を以下のように追加する.
		<Directory "/usr/local/apache2/html">
AllowOverride all
Options -MultiViews
Allow from all
</Directory>
最後に,Railsアプリを登録する.
		RailsBaseURI /people
RailsBaseURI /person
# apachectrl restart


http://ホスト名/hoge/people
http://ホスト名/hogehoge/person
でアクセス可能になる.


Apache2のインストール

Stable最新版のソースを取ってきて,自前ビルドする.
入手先:http://httpd.apache.org/
入手ファイル:httpd-XXXX.tar.gz



ビルド&インストール

# tar xvzf httpd-XXXX.tar.gz
# cd httpd-XXXX
# ./configure --enable-so
とりあえず,mod_soのみ有効としておこう・・・
--enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache" を追加しておくほうが良かったかも??
# make
# make install
-> /usr/local/apache2 にインストールされる.



設定

# cd /usr/local/apache2/conf
# emacs ./httpd.conf &
編集内容は以下の通り.
	Include config/extra/httpd-usrdir.conf
上記になるように行頭の#を取って,ユーザディレクトリを有効化する.


Webページを公開しようとするユーザのホームディレクトリおよび,その直下のpublic_html(なければ作成)のパーミッションを755としておく.
# cd /usr/local/bin
# ln -s /usr/local/apache2/bin/apachectl .
# apachectl start



自動起動

~/httpd-XXXX/build/rpm/httpd.initを再利用する方法だとうまくいかなかったので,ここ にある方法(自前でスクリプトを記述する方式)を採用.


# emacs /etc/rc.d/init.d/httpd
#!/bin/sh
#
# chkconfig: XX XX XX
# description: Apache2 XXXX
# processname: httpd
# pidfile: /usr/local/apache2/logs/httpd.pid
# config: /usr/local/apache2/conf/httpd.conf
#

apachectl="/usr/local/apache2/bin/apachectl"

case "$1" in
start|stop|restart|fullstatus|status|graceful|graceful-stop|configtest|startssl)
$apachectl $@
;;
*)
;;
esac


# chmod 755 /etc/rc.d/init.d/httpd
# chkconfig --add httpd
# chkconfig httpd on