スポンサーリンク

CentOS 5.6上で Apache+Passenger+Ruby on Rails 1.2 を動作させる手順 (仮想マシン上に,レガシーRailsの実運用環境を構築)


Ruby on Railsのアプリを実用的に動作させるためには,Passenger(mod_rails)を使う。

これはApacheのモジュールであり,Linux上でしか動かない。


したがって,もしRailsで真面目に開発・運用したい場合,

Linux上に Apache+Passenger+Ruby on Rails の環境を構築する必要がある。



下記では,Windows マシン上で,そのような開発環境をゼロから構築する。


インストールするもの:

  • VMWare Server 2
  • CentOS 5.6
  • Ruby 1.8.6
  • RubyGem 1.3.6
  • Apache 2.2.3
  • mod_rails(passenger) 2.2.7
  • Ruby on Rails 1.2.6


手順

  • (1)OSの準備(VMWare Server+CentOS)
  • (2)gccのインストール
  • (3)Ruby+RubyGemのインストール
  • (4)Ruby on Rails のインストール
  • (5)Ruby on Rails の動作テスト(Webrick経由)
  • (6)Apacheのインストール
  • (7)Apacheの動作確認
  • (8)Passengerのインストール
  • (9)Ruby on Rails の動作テスト(Passenger経由)


なお,世の中では Rails 2 系や 3 系を動作させる手順であれば,
多数公開されている。

しかし 1.2 系のレガシーRailsをpassengerでデプロイする手順についての情報は,意外なほど少ない。


(1)OSの準備(VMWare Server+CentOS)

VMWare Server 2上に,isoイメージからCentOS 5.6をインストールする。


ここでは,ホストOS・ゲストOS共に,ごく簡潔に説明する。

もし画面キャプチャ付きの詳しい説明がほしい場合は,下記サイトを参照。

VMWare Server2とCentOS5.4のインストール
http://blog.amunsnet.com/archives/2010/02/07213503.html


VMware Server 2 でクライアントOSのインストール(その1:仮想マシンの作成)
http://ynigi.cocolog-nifty.com/blog/2009/03/vmware-server-3.html

VMWare Server 2のインストール方法


VM社のトップページにアクセス
http://www.vmware.com/jp/


「製品」タブの
「無償の製品」カテゴリ内の
「VMWare Server」をクリック。


ダウンロードをクリック。


アカウントがなければ
「Register for your FREE Download」の欄に入力。

アカウントがあればログイン。


BinariesのVMware ServerのStart Download Managerを押下。


ダウンロードマネージャでダウンロード実行。

「Start Download Manager」ボタンのあるページ上に
「Licensing VMware Server for Windows」
が表示されているので,そのライセンス情報をインストール時に利用。


インストーラからインストール実行。
※Dドライブにインストールすること。Cドライブ上でOSを2つ走らせるのは愚行。

ゲストOSの作成方法

CentOSのインストールDVD用のisoイメージをダウンロード。

(4.0G)

※なお,5.3のisoイメージなどはもう入手不可能なようだ。


D:\Virtual Machines\iso
内に保存。


localhostのVMWare管理画面に,IEでアクセス。

※もしアクセスできない場合は,Web UIのサービスを起動する。

vmrun.exeで,仮想マシンの操作をバッチから自動化しよう (VMWare Server 2で,WindowsからLinuxをOSごと自動操作)
http://d.hatena.ne.jp/language_and_engineering/20100514/p1

  • 補足(1)VMWare Host Agent サービスについて:ホスト側でVMを立ち上げておくためのバッチ


Windowsのユーザ認証情報でログイン。

※ホストマシンがWindows Vistaの場合,よくある失敗について参考:

VistaにVMware Server 2.0を入れてハマって解決したAdd Star
http://d.hatena.ne.jp/IwamotoTakashi/20081015/p1

  • Windowsのユーザ名とパスワードでログインすればOKという情報を見つけ、入力。が、認証エラーになります。Vistaの管理者ユーザであれば認証が通ると気づくまで、しばらくかかりました…


VMware server2.0x をvistaに導入してみようか
http://hogehoge77.blog10.fc2.com/blog-entry-199.html

  • PC名が日本語だとインストール時に文字化けする事がある


Add New Virtual Machineで新規仮想マシンを作成。

仮想マシンの設定:

  • OS:32bit RHEL5
  • メモリ:512MB
  • HDD:40GB
  • NW:ブリッジ
  • Floppy & USB:不要


IEのでフォルトの設定だと,VMWare コンソールのプラグインが起動できない。

IEでブラウザ下部の「保護モード」をダブルクリックし
「信頼済みサイト」で「サイト」にlocalhostを追加。(https不要)


VM管理画面上で,緑色の三角ボタンから,該当仮想マシンを起動。

コンソールタブを開き,任意の場所をクリックしてコンソールを開く。


CentOSの画面が開く。そのうちインストール開始。

  • メディアのテスト>skip
  • 言語>Japanese
  • キーボード>Japanese
  • ドライブを初期化しますか>はい

パーティション:カスタムレイアウトで次へ

「空き」を選択して「新規」

  • マウントポイント boot, ext3, 100MB, 固定容量,基本パーティション
  • swap, 0MB, 固定容量
  • マウントポイント / , ext3, 3000MB, 固定容量,基本パーティション
  • マウントポイント /var, ext3, 5000MB, 固定容量
  • マウントポイント /usr, ext3, 10000MB, 固定容量
  • マウントポイント /tmp, ext3, 3000MB, 固定容量

※パーティションの参考やサンプル設定:

CentOS5のインストール
http://tmcosmos.org/linux/centos/co5.html#install


CentOS5インストール手順のパーティション作成について
http://www.unix-vm.com/centos_1_4.html


CentOS5 ディスクパーティション設定
http://www.obenri.com/_install_cent5/disk_cent5.html


メモリー対決 -お名前.comのVPS VS さくらのVPS
http://konohaotoshi.blog69.fc2.com/blog-entry-337.html

  • お名前.comのVPSには、swap領域がありませんでした。
  • 実メモリーは1GBとなっていますが、これは仮想システムに余裕があるときだけで、リソース保証されるのは、最低512MBです。
  • GRUBブートローダ:インストールする
  • NW:DHCPで自動設定か,固定IPアドレスを入力。DNSやデフォルトゲートウェイも。
  • 地域:アジア東京

rootパスワードを入力。

パッケージ:今すぐカスタマイズする>なにも触らずに次へ

インストール開始。


インストール完了。再起動


初期設定:

  • ファイアウォールの設定:そのまま
  • SELinux:そのまま
  • 日付と時刻:合わせる
  • ユーザ:作成しない
  • サウンド:適当に
  • 追加CD:なし

終了。

rootユーザでGUIにログイン。

デスクトップ上で右クリックして,端末を開く。


めぼしい外部サーバに対してpingなど打って,NW疎通確認。

※もしつながらなかった場合:

  • /sbin/dhclient と打ってDHCP有効化してみる
  • system-config-networkコマンドでGUIからNW再設定
  • /etc/init.d/network restartでネットワーク再起動
  • ifconfigでIPアドレスなどの設定が完了している事を確認


ホストマシン上で,PuttyやWinSCP等のSSHクライアントから該当仮想マシンに接続できる事を確認。

接続設定を保存。

参考:

CentOS に標準でインストールされる SSHサーバ の OpenSSH
http://tech.hitsug.net/?CentOS%2FSSH%E3%82%B5%E3%83%BC%E3%83%90
CentOS ではインストールと同時にSSHサービスの「OpenSSH」がインストールされています。


Windows PCと仕事机をセットアップする際の手順の記録
http://d.hatena.ne.jp/language_and_engineering/20110806/p1

  • Putty:めぼしいサーバへの接続設定を作成。文字コードをUTF8に。ANSI Blueが見づらいので「70 70 220」に変更して保存

ここまでできたら,

とりあえずshutdown -h nowしてゲストOSを終了させる。


VM管理画面上で該当仮想マシンにNotesを記録。
(IPアドレスなど)


該当仮想マシンのスナップショットを作成。

仮想マシンを再度起動。


これで,環境構築作業を始められるプラットフォームが整った。


(2)gccのインストール

ここからは,仮想マシン上でのCUIの作業になる。

各種ミドルウェアをコンパイルするために必要。

[root@localhost ~] yum install gcc

〜〜

Installed:
  gcc.i386 0:4.1.2-50.el5

Dependency Installed:
  glibc-devel.i386 0:2.5-58.el5_6.4                   glibc-headers.i386 0:2.5-58.el5_6.4
  kernel-headers.i386 0:2.6.18-238.19.1.el5

Dependency Updated:
  glibc.i686 0:2.5-58.el5_6.4    glibc-common.i386 0:2.5-58.el5_6.4    nscd.i386 0:2.5-58.el5_6.4

Complete!

なお,「〜〜」というのは,「色々出力される」のを省略している意。


参考:

様々なコマンドに必要なCコンパイラgccをyumでインストールするメモ(linux)
http://ref.layer8.sh/ja/entry/show/id/1041

  • yum install gcc


PostgreSQLインストールメモ
http://kandk.cafe.coocan.jp/jeans/?itemid=15

  • gccが無い状態でconfigureとかmakeをしようとすると,「configure: error: no acceptable C compiler found in $PATH」のエラーになる


※yum実行時に,下記のようなエラーが出る場合がある。
これは,デフォルトゲートウェイやDNSの設定が済んでないという意味。

Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=5&arch=i386&repo=os error was
[Errno 4] IOError: urlopen error (-3, '\xe5\x90\x8d\xe5\x89\x8d\xe8\xa7\xa3\xe6\xb1\xba\xe6\x99\x82\xe3\x81\xae\xe4\xb8\x80\xe6\x99\x82\xe7\x9a\x84\xe3\x81\xaa\xe5\xa4\xb1\xe6\x95\x97')
Error: Cannot find a valid baseurl for repo: base

参考:

CentOSのyumがうまくできない時
http://blog.mizoshiri.com/archives/93

  • もし nslookup google.com で「connection timed out; no servers could be reached」だったら,ネットワーク設定に問題がある


これで,各種ソフトをコンパイル・インストールする準備が整った。


(3)Ruby+RubyGemのインストール

Ruby

まず,readlineをインストール。
(irbとかで,行単位の対話型操作をする時に必要になる)

[root@localhost ~] which yum
/usr/bin/yum

[root@localhost ~] yum install readline readline-devel

〜〜

Installed:
  readline-devel.i386 0:5.1-3.el5

Dependency Installed:
  libtermcap-devel.i386 0:2.0.8-46.1

Complete!

次に,Rubyをインストール。

[root@localhost ~] cd /tmp

[root@localhost tmp] wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p420.tar.gz

〜〜

[root@localhost tmp] tar xvzf ruby-1.8.6-p420.tar.gz

〜〜

[root@localhost tmp] cd ruby-1.8.6-p420

[root@localhost ruby-1.8.6-p420] ./configure --with-install-readline

〜〜

config.status: creating Makefile
configure: WARNING: unrecognized options: --with-install-readline


[root@localhost ruby-1.8.6-p420] make

〜〜

[root@localhost ruby-1.8.6-p420] make install

〜〜

コンパイルオプションについて参考:

Railsに関するハマったこと
http://d.hatena.ne.jp/yotena/20071201/1196436201

  • rubyを./configure make make installでしれっと最新版をいれた場合、./configureに「--with-readline-dir=/usr/local」または「--with-install-readline」をつけなければscript/consoleすらできない


Snow Leopard の irb で日本語が使えない
http://kangaetakoto.blogspot.com/2011_06_01_archive.html

  • Ruby のインストール時、 ./configure の出力で下記警告が出るが、問題なく有効になっているってのをどこかで読んだ。実際に問題なく動いてくれているのでOK
  • configure: WARNING: unrecognized options: --with-readline-dir


※Rubyのバージョンとして1.8.6を使う理由:

Ruby 1.8.7 compatibility
http://stackoverflow.com/questions/2004748/ruby-1-8-7-compatibility
I had a exception when I switch to Ruby 1.8.7
There will be a lot of compatibility issues with such an old version of rails and ruby 1.8.7.


ruby 1.8.7 では Rails 1.2.x の truncate が動かない
http://d.hatena.ne.jp/tkrd/20081223/1230019482
Rails 1.2.x のアプリケーションを ruby 1.8.7 で動かそうとすると
undefined method length' for Enumerable::Enumerator
というエラーが出て動かない。


Ruby,irb, readlineの動作確認をする。

[root@localhost ruby-1.8.6-p420] ruby --version
ruby 1.8.6 (2010-09-02 patchlevel 420) [i686-linux]

[root@localhost ruby-1.8.6-p420] irb
irb(main):001:0> 1 + 1
=> 2
irb(main):002:0> 1 + 1 # 上キーを押して,直前の入力項目が出る事を確認
=> 2
irb(main):003:0> exit
[root@localhost ruby-1.8.6-p420]#
gem

次に,RubyGemsをインストールする。

[root@localhost ruby-1.8.6-p420] cd /tmp
[root@localhost tmp] wget http://rubyforge.org/frs/download.php/69366/rubygems-1.3.6.zip

〜〜

[root@localhost tmp] unzip rubygems-1.3.6.zip

〜〜

[root@localhost tmp] cd rubygems-1.3.6
[root@localhost rubygems-1.3.6] ruby setup.rb

〜〜

#動作確認
[root@localhost rubygems-1.3.6] gem --version
1.3.6

#zlibを補填
[root@localhost ~] cd /tmp
[root@localhost tmp] yum install zlib-devel

〜〜

Complete!

[root@localhost tmp] cd ruby-1.8.6-p420
[root@localhost ruby-1.8.6-p420] cd ext/zlib/
[root@localhost zlib] ruby extconf.rb --with-zlib-include=/usr/include -with-zlib-lib=/usr/lib

〜〜

[root@localhost zlib] make

〜〜

[root@localhost zlib] make install
/usr/bin/install -c -m 0755 zlib.so /usr/local/lib/ruby/site_ruby/1.8/i686-linux


※zlibがないとgem実行時にエラーになる件について:

Rails 2.1 環境構築 メモ 自分用
http://adalberyo.blog116.fc2.com/blog-entry-36.html

  • 下記のエラーで怒られるならばzlib-develを入れてあげます
  • lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- zlib (LoadError)


Ruby on RailsをVine 3.2へインストール
http://toshihilog.blog63.fc2.com/blog-category-5.html

  • /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in `require__':No such file to load -- zlib (LoadError)


これで,Ruby周りの環境が整った。


(4)Ruby on Rails のインストール

gemからrailsをインストールする。

単にパッケージ名を「rails」と指定しただけだと最新版が落ちてきてしまう。

欲しいのは1.2なので,バージョンをそれに限定する。

[root@localhost ~] gem install --source http://gems.rubyforge.org rails -v 1.2.6 -y --include-dependencies

〜〜

#動作確認
[root@localhost ~] which rails
/usr/local/bin/rails

参考:

リポジトリから削除されたRails 1.2.6をインストールする。
http://chiki2-cq.seesaa.net/article/94778988.html

  • sourceを指定しないと無理


gemが遅い件について:

RubyGems のソースインデックスの取得がやたら遅い件から RPA を振り返る
http://d.hatena.ne.jp/babie/20051226/p1

  • gem のリポジトリの取得ってバカみたいに遅いよね。単にリポジトリを提供しているサーバの問題かも


rubygemsがやたら遅かった
http://blog.livedoor.jp/sunadaa/archives/50652742.html

  • 原因が分からないのでほおっておいたが、今日ふと思いついてcolinuxのメモリ割り当てを128→512にしたらさくさく


これで,Ruby on Railsのプロジェクトを作成する準備が整った。


(5)Ruby on Rails の動作テスト(Webrick経由)

ためしに1つrailsのプロジェクトを作って,Webrickサーバで動作確認する。

Webrickは付属品なので,Apacheがなくても動作テストができる。


「hoge」というプロジェクトを作成する。

あくまで動作確認用なので,/tmp上で作業。

[root@localhost ~] cd /tmp
[root@localhost tmp] rails hoge

〜〜

[root@localhost tmp] cd hoge

#サーバ起動
[root@localhost hoge] ruby script/server
./script/../config/boot.rb:20:Warning: Gem::SourceIndex#search support for String patterns is deprecated, use #find_name
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
INFO  WEBrick 1.3.1
INFO  ruby 1.8.6 (2010-09-02) [i686-linux]
INFO  WEBrick::HTTPServer#start: pid=1133 port=3000

この状態で,下記のURLにブラウザからアクセス。

「Welcome aboard You’re riding the Rails!」という画面になればOK。


※もし「接続がタイムアウトしました」となった場合,ファイアウォールの設定を変更し,3000番ポートでの通信を許可する。
CTRL+CでWebrickをいったん停止させ,下記のコマンドを実行。

#ファイアウォールを停止させる度胸がある場合
[root@localhost hoge] /etc/init.d/iptables stop


#そんな度胸はなく,むしろ常識があり,このポートだけ通信を許可する場合
[root@localhost hoge] iptables -I INPUT -p tcp -m tcp --dport 3000 --syn -j ACCEPT 

その後,再度Webrickを起動させてブラウザからアクセスすればOK。

参考:

WEBrickを起動し、ローカルの3000ポートに接続して動作確認というところでうまく行かなくなりました
http://q.hatena.ne.jp/1182247864

  • Linuxのファイアウォールがポート3000でのアクセスをブロックしていたみたいです


iptablesいじってポート3000を通す
http://d.hatena.ne.jp/qnzm/20090118


iptablesのデフォルトの設定(#iptables -Lの見方)
http://oshiete.goo.ne.jp/qa/5867511.html

  • iptable -L -v

※なお,上記のコマンドでiptablesを停止させても,それはその場限り。

仮想マシンを再起動すれば,再度iptablesが有効になり,該当ポートの通信ができなくなる。

もし,本当に実験的な環境にすぎないのであれば,

下記のコマンドでiptablesを恒久的に起動しないように設定してしまう。

chkconfig iptables off

[VMware]iptablesを止めたらホスト(WinXP)からhttp接続ができた
http://labs.uechoco.com/blog/2008/01/vmware.html

  • iptablesの設定方法を調べてみたけど、100%は理解できない。オプションの指定の仕方が多いのと、インストール時に勝手にファイアウォールが有効になってたようで、pingとかsshとかは通るけど、httpは通らない
  • iptablesは有効のほうがいいのだろうけど、Vmware上の仮想のLinux環境だし、いいのかなぁっと安易な考えを抱いて、iptablesサービスを自動起動しないようにしました


これで,Ruby on Railsが単体で動作するようになった。


しかし,Webrickは不安定。

手軽なのはいいが,実運用には向かない。

Ruby on Rails 1.2 での開発のはまり所
http://d.hatena.ne.jp/language_and_engineering/20110309/p1

  • (4−2)Webrickがすぐに落ちる
    • すぐに固まる。リクエストがタイムアウトになり,動作がフリーズする。
    • Seleniumで回帰テストができないぐらいひどい。テストの途中で必ずサーバが固まる。テストシナリオの最後まで到達できない。
    • 動作サーバをApache + mod_railsに入れ替えることで対処。


たまに,何の理由もなく下記のようなエラーを吐いて,画面が表示されなくなったりする。

(その場合,Webrickを再起動すれば症状は治る。)

ERROR NoMethodError: private method `gsub!' called for #
/usr/local/lib/ruby/1.8/webrick/htmlutils.rb:16:in `escape'
/usr/local/lib/ruby/1.8/webrick/httpresponse.rb:232:in `set_error'
/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick_server.rb:104:in `handle_file'
/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick_server.rb:76:in `service'
/usr/local/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
/usr/local/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
/usr/local/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
/usr/local/lib/ruby/1.8/webrick/server.rb:162:in `start'
/usr/local/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
/usr/local/lib/ruby/1.8/webrick/server.rb:95:in `start'
/usr/local/lib/ruby/1.8/webrick/server.rb:92:in `each'
/usr/local/lib/ruby/1.8/webrick/server.rb:92:in `start'
/usr/local/lib/ruby/1.8/webrick/server.rb:23:in `start'
/usr/local/lib/ruby/1.8/webrick/server.rb:82:in `start'
/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick_server.rb:63:in `dispatch'
/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/commands/servers/webrick.rb:59
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:495:in `require'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:342:in `new_constants_in'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:495:in `require'
/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/commands/server.rb:39
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
script/server:3


ここからは,このRailsアプリが,Apache上で安定稼働するように環境構築する。


(6)Apacheのインストール

Railsアプリを安定動作させるためのミドルウェアPasssengerは,Apacheのモジュール。

なので,まずはApache(httpd)をインストール。

[root@localhost ~] yum install httpd-devel-2.2.3

〜

Complete!

[root@localhost ~] httpd -v
Server version: Apache/2.2.3
Server built:   May  4 2011 06:51:15

httpd-develを入れれば,依存関係が解決されてhttpdも自動的にインストールされる。


※RPMの末尾につく「devel」とは,開発者向けの拡張モジュールで,他のSWと該当SWが連携するための仕組みを提供したりする。

CentOS に apxs(APache拡張機能 eXtenSion) をインストールする
http://dev.halhal.info/archives/133

  • apxsとはAPacheの拡張機能(eXtenSion)のこと
  • 標準モジュールでない、サードパーティや独自のDSOモジュールを利用可能になる


※なお,Apacheはソースからコンパイルすると色々と設定が面倒。
mod_authz_host.soが無いとか,chkconfigが通らないとか,DSOが空っぽとか,
初期状態でhttpd.confに何もLoadModuleされてないとか,環境変数の手動設定とか,
なんやかんや・・・

【Apache】エラーを検証する 〜其ノ一〜
http://blog.goo.ne.jp/puri69/e/08fe0b92089dc311ee17ff019824ac3c

  • Syntax error on line 168 of /usr/local/httpd-2.2.16/conf/httpd.conf:
  • Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration


chkconfig登録時の小さな落とし穴
http://d.hatena.ne.jp/izoc/comment?date=20100318


Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用
http://redmine.jp/tech_note/apache-passenger/

  • Apacheをソースからビルドしてインストールした環境では、APXS2およびPATH環境変数を設定する必要があります
  • 設定を行わないとスクリプトがApache本体、Apacheヘッダファイル、APRを見つけることができず、インストールができません


Apache Webサーバー ソースコードからインストール
http://www5.plala.or.jp/vaio0630/apache/source.htm

  • Apacheのソースコードからのインストールは至極簡単です。失敗することはまず無いでしょう
  • Apacheの難しさはインストール自体ではなく、インストールしてからの設定、そして何よりもまずいかにシンプルな設計でインストールするか(不必要なモジュールを組み込まない、DSOモードを適用するかどうか等)にある

なお,バージョンとして2.2.3を選んだが,動作することが分かっている組み合わせならバージョンは任意。

やたらに最新のものをインストールしても色々動かない事が多いので注意。


動作確認が取れているバージョンの組み合わせの例:

(1)

  • CentOS 5.3
  • Apache 2.2.6
  • mod_rails 2.1.3
  • Rails 1.2.6
  • Ruby 1.8.6

(2)

  • CentOS 5.6
  • Apache 2.2.3
  • mod_rails 2.2.7
  • Rails 1.2.6
  • Ruby 1.8.6

ここまでで,Webサーバの構築が終わった。


(7)Apacheの動作確認

起動スクリプト経由で,Apacheが単体で動作することを確認する。

[root@localhost ~] /etc/init.d/httpd start
httpd を起動中:                                            [  OK  ]

この状態で,下記のURLにブラウザからアクセス。

「Apache 2 Test Page powered by CentOS」という画面になればOK。
(ソースコードからインストールした場合は「It worls!」のように表示される)


※もし「接続がタイムアウトしました」となった場合,ファイアウォールの設定を変更し,80番ポートでの通信を許可する。

iptables -I INPUT -p tcp -m tcp --dport 80 --syn -j ACCEPT 


アクセスログが表示される事を確認

[root@localhost ~] less /var/log/httpd/access_log
[root@localhost ~] less /var/log/httpd/error_log

参考:

Webサーバーのインストール・設定
http://www.psg.jp/web_server.html#rpminst

  • ログファイルの記録先はインストール方法によって異なる:
    • RPMの場合:/var/log/httpd/
    • ソースコードからコンパイルの場合:/usr/local/apache2/logs/

なお,仮想マシン起動時に自動的にApacheが立ち上がるようにしたい場合は chkconfig httpd on としておく。



ここまでで,安定したWebサーバが利用可能になった。


(8)Passengerのインストール

ApacheおよびRailsとマッチするような,正確なバージョンのpassengerを導入する必要がある。


まずgemからpassengerを入手したのち,その動作に必要な各種ミドルウェア類を追加する。

そして,passenger-install-apache2-moduleコマンドでApacheとの連携設定を行なう。

[root@localhost ~] gem install passenger --version '= 2.2.7'

〜〜

Installing RDoc documentation for passenger-2.2.7...

#gemの準備完了の確認(動作中ではないのでERRORと出る)
[root@localhost ~] passenger-status
ERROR: Phusion Passenger doesn’t seem to be running.


[root@localhost ~] yum install gcc-c++

〜〜

Complete!

[root@localhost ~] yum install openssl-devel

〜〜

Complete!

[root@localhost ~] cd /tmp/ruby-1.8.6-p420/ext/openssl
[root@localhost openssl] ruby extconf.rb

〜〜

Done.
[root@localhost openssl] make

〜〜

[root@localhost openssl] make install

〜〜

[root@localhost ~] passenger-install-apache2-module

〜〜

(Enterキーを押下すると依存関係をチェックし,インストール開始)

〜〜

The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.7/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.7
   PassengerRuby /usr/local/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.

(Enterキーを押下)

--------------------------------------------
Deploying a Ruby on Rails application: an example

Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      DocumentRoot /somewhere/public    # <-- be sure to point to 'public'!
      <Directory /somewhere/public>
         AllowOverride all              # <-- relax Apache security settings
         Options -MultiViews            # <-- MultiViews must be turned off
      </Directory>
   </VirtualHost>

And that’s it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:

  /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.7/doc/Users guide Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.


参考:

Phusion Passenger 全ての古いバージョンのダウンロードリンクのリスト
http://rubyforge.org/frs/?group_id=5873


※なお,g++とはGNUによるC++のコンパイラである。
同一名称で,ガンダムのファンサイトが存在するが,決して混同しないように

GNUコンパイラコレクション
http://ja.wikipedia.org/wiki/GNU%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

  • GNU C++コンパイラをG++と呼ぶ


G plusplus
http://anything.sakura.ne.jp/plus/
G++(Gplusplus)へお越し頂き誠にありがとうございます
このサイトはトレーディングカードゲーム「ガンダムウォー」に関するコンテンツを有するサイトです


※もしg++やRubyのOpenSSLサポート設定よりも前に passenger-install-apache2-module コマンドを実行すると,下記のように不足しているミドルウェアの詳細情報とインストール方法が表示される。

                                                                                      • -

Checking for required software...

* GNU C++ compiler... not found
* Ruby development headers... found
* OpenSSL support for Ruby... not found
* RubyGems... found
* Rake... found at /usr/local/bin/rake
* Apache 2... found at /usr/sbin/httpd
* Apache 2 development headers... found at /usr/sbin/apxs
* fastthread... found
* Apache Portable Runtime (APR) development headers... found at /usr/bin/apr-1-config
* Apache Portable Runtime Utility (APU) development headers... found at /usr/bin/apu-1-config

Some required software is not installed.
But don't worry, this installer will tell you how to install them.

Press Enter to continue, or Ctrl-C to abort.

                                                                                      • -

Installation instructions for required software

* To install GNU C++ compiler:
Please run yum install gcc-c++ as root.

* To install OpenSSL support for Ruby:
Please (re)install Ruby with OpenSSL support by downloading it from http://www.ruby-lang.org/.

If the aforementioned instructions didn't solve your problem, then please take
a look at the Users Guide:

/usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.7/doc/Users guide Apache.html


※もし, yum install openssl-develする前にRuby側でmakeしようとしても,
「make: `all' に対して行うべき事はありません.」とか
「make: `install' に対して行うべき事はありません.」といったエラーが表示される。


※もしバージョンを指定せずに普通にgem install passengerとすると,3.0.8がインストールされてしまう。
そうすると,Apacheが起動できなくなったりする。
エラーメッセージは下記。

httpd を起動中: httpd: Syntax error on line 412 of /etc/httpd/conf/httpd.conf: Cannot load /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.8/ext/apache2/mod_passenger.so into server: /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.8/ext/apache2/mod_passenger.so: undefined symbol: ap_get_server_banner
[失敗]

もしそうなったら,gem uninstall passengerとして,
正確なバージョンの物を入れ直すこと。

ap_get_server_banner error when launching Apache2
http://www.linuxquestions.org/questions/linux-newbie-8/ap_get_server_banner-error-when-launching-apache2-888684/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+linuxquestions%2Flatest+%28LQ+-+Latest+Threads%29
The actual problem is with the application you're trying to install (Phusion Passenger).
Quote:
mod_passenger.so: undefined symbol: ap_get_server_banner
I don't know how you've installed it, but if you used the deb package, I guess you need to contact the maintainer


※passengerのバージョンが低すぎても駄目。例えば,passenger 2.1.3だと下記のようなエラーになる。

[root@localhost ~] passenger-install-apache2-module


### In ext/phusion_passenger:
rake aborted!
uninitialized constant RUBY

Tasks: TOP => apache2 => native_support => ext/phusion_passenger/native_support.so => ext/phusion_passenger/Makefile
(See full trace by running task with --trace)

--------------------------------------------
It looks like something went wrong

Please read our Users guide for troubleshooting tips:

   /usr/local/lib/ruby/gems/1.8/gems/passenger-2.1.3/doc/Users guide.html

If that doesn’t help, please use our support facilities at:

   http://www.modrails.com/

We’ll do our best to help you.

Solaris10:Apacheとredmineの連係
http://wiki.kinusati.net/index.php/Solaris10:Apache%E3%81%A8redmine%E3%81%AE%E9%80%A3%E4%BF%82#passenger.E3.81.AE.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB

  • インストールされるpassengerのバージョンが2.2.5だとSolarisの場合以下のエラーが出ますので、 2.2.7以降に適宜バージョンアップしてください。

※VPSホスティングサービスでpassenger-install-apache2-moduleコマンドを実行すると,メモリ不足で途中で落ちる。

Passengerのインストール
http://snjx.info/diary/snjx/redmine

  • 1strentalserverの一番安いVPSプランで動いている。スペックとしてはメモリが256MB
  • virtual memory exhausted: Cannot allocate memory
  • service --status-all で動いているサービスを確認して、一個いっこ停めた。apacheやらsendmailやらすべてとめてしまってほとんどsshdだけがまともに走ってる状態にまでしてやっとコンパイルが通った


お名前.com の VPS を Zabbix でリモート監視
http://giraffy.jp/blog/2010/03/05/server/1262/

  • Web サーバやメールサーバを お名前.com の VPS サーバ上で動かすようにしているのですが、これが非常に不安定
  • Apache や Postfix, BIND 等のプロセスが突然すべて落ちてしまうというひどい現象が起きてしまっていたのでサポートに問い合わせたところ、メモリーの使用量は500MB以内に調整するように、とのこと
  • メモリーは最近増量オプションも加わったので、これを使えばもう少し安定するのかも、とも思うのですが、やっぱりあまり長くは利用できそうにないなぁ、という印象です。ちょっとでもシリアスな使い方をするなら、これはないよな、というのが分かってきました

これで,Apacheからpassengerを呼び出し可能になった。


(9)Ruby on Rails の動作テスト(Passenger経由)

ここで,いよいよPassengerを実際に動かす所まで来た。

先ほどWebrickで動作させたRailsのプロジェクトを,今度はPassenger上で動作させる。

ApacheにPassengerを認識させ,PassengerにRailsプロジェクトを認識させる

ゲストマシン上の設定ファイル /etc/httpd/conf/httpd.conf を,
WinSCPなどでWindows上に転送。


エディタで開き,末尾に下記の設定を追記(UTF-8)。


# passengerのモジュールを読み込み
LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.7
PassengerRuby /usr/local/bin/ruby


# /var/www/htmlという公開ディレクトリ中の
# link_hogeというシンボリックリンクの参照先を
# Railsのルートディレクトリにする
<VirtualHost *:80>
    DocumentRoot /var/www/html
    ErrorLog logs/error_log
    CustomLog logs/access_log common
    RailsBaseURI /link_hoge
</VirtualHost>


また,306行目あたりから Directory "/var/www/html" とあるが,

この中の320行目を修正。

    Options Indexes FollowSymLinks
 ↓
    Options Indexes ExecCGI FollowSymLinks

この設定ファイルを /etc/httpd/conf/httpd.conf に上書き。


そして,設定ファイル中の記載通りにシンボリックリンクを作成する。

その後,設定ファイルをサーバに読み込ませるためにApache再起動。

[root@localhost ~] cd /var/www/html
[root@localhost html] ln -s /tmp/hoge/public link_hoge

[root@localhost html] /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

シンボリックリンクをpublicフォルダに向けて作成するというところがポイント。


※publicではなく,その一つ上のフォルダにRailsBaseURIを指定してしまった場合のエラーメッセージ:

passenger:Rails deployment that just works

Cannot start Ruby on Rails application

Phusion Passenger has listed more information about the error below.

The directory "/var/www" does not appear to be a valid Ruby on Rails application root.

シンボリックリンクの張り間違いでも同様のエラーが発生する。


静的なページの動作テスト

この状態で,下記のURLにブラウザからアクセス。

「Welcome aboard You’re riding the Rails!」という画面になればOK。


※もし「403 Forbidden」となった場合,エラーログには下記のように出力されている。

[root@localhost html]# tail /var/log/httpd/error_log

[error] *** Passenger could not be initialized because of this error: Cannot create FIFO file /tmp/passenger.25773/.guard: Permission denied (13)
[crit] [client XXX.XXX.XXX.XXX]  (13)Permission denied: access to /link_hoge/index.html denied

これは,passengerの権限不足ということ。

この場合,SELinuxの設定を変更すればよい。

[root@localhost html] setenforce 0
[root@localhost html] /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
[root@localhost html] passenger-status
*** Cleaning stale folder /tmp/passenger.25773
*** Cleaning stale folder /tmp/passenger.25771
----------- General information -----------
max      = 6
count    = 0
active   = 0
inactive = 0
Waiting on global queue: 0

----------- Domains -----------
[root@localhost html] getenforce
Permissive

これで,ブラウザ上から問題なくPassenger経由でRailsにアクセスできるようになる。


参考:

Passenger CentOSで動かす
http://mindia.jp/book/akkun/keyword/Passenger

  • passenger-spawn-serverが動いていない。apacheのエラーログを確認。権限が足りない的なエラー
  • SELinux無効にしたらworks great!らしい。setenforce 0 で無効に、そしたらやった動いたー


SELinuxを無効化する方法
http://www.server-memo.net/linux-setting/selinux6a5f80fd306e505c6b62

  • SElinuxを適用するとセキュリティは格段に上昇するのですが、この機能を使いこなすのは結構大変なので私はOSインストール時にはいつもSELinux機能はOFFにしています。
  • 恒久的に無効化するには,/etc/sysconfig/selinux 中で SELINUX=disabled とすればよい


第1回 セキュアOS機能「SELinux」の基本的な仕組み
http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280414/

もしSELinuxを起動させたままで,Passengerも動かしたいという場合,

以下のURLが参考になる。しかし,手間がかかる。

passengerをselinuxありで動作させるには
http://d.hatena.ne.jp/dreammind/20090316/1237153132

  • passenger用のSELinuxポリシーファイルを作成して再コンパイル

なお,エラーログをぱっと見たときに「Permission denied」だけに目を奪われ,Passengerが起動していない事に気づかないでいると,下記のような情報に翻弄されることになるだろう。
ログは全体をちゃんと読もう。

Apacheでunable to check htaccess fileにハマった
http://d.hatena.ne.jp/memdhoi/20100425/1272195882

  • (13)Permission denied: /home/user/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable
  • ドキュメントルートは/home/user/htdocsである。
  • つまり、ドキュメントルートの親のディレクトリにある.htaccessが読み取れないという問題らしい。


エラーに対する対処方法
http://blog.development-network.net/ung/2006/11/post_60.html

  • [crit] [client XXX.XXX.XXX.XXX] (13)Permission denied: /home/YYY/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable
  • Apacheのログにこれが含まれている場合には、.htaccessが読み込めないものによる。
  • ただし、DocumentRootに/home/YYY/ZZZ/などになっているにもかかわらず、DocumentRootよりも上位のディレクトリの.htaccessに読みとりエラーが出ていたらそれは/home/YYYディレクトリに対してotherの実行権限がないことによる問題が考えられる。


※なおもし,passenger-install-apache2-moduleコマンドの出力の
最後の部分で表示されているサンプルをそのままコピペすると,
コメントが引数と解釈されてしまいエラーになる。

RailsアプリをPassengerとApacheの連携で動かす
http://d.hatena.ne.jp/Mazin/20090809/1249798716

  • DocumentRootの引数が2つあんぞボケ!って怒られる。
  • Syntax error on line 958 of /etc/httpd/conf/httpd.conf: DocumentRoot takes one argument, Root directory of the document tree
動的なページの動作テスト

ところで,「Welcome aboard」のようなダミーページだけでは,

ちゃんとRailsが動作できているのか不安だ・・・

という人もいるだろう。


そこで念のため,Controllerが正常に動作することを検証しよう。


まず,セッション格納フォルダの権限を変更。


[root@localhost ~]# cd /tmp
[root@localhost tmp]# cd hoge
[root@localhost hoge]# chmod -R 777 tmp


次に,下記のソースコードを /tmp/hoge/app/controllers/fuga_controller.rb として保存。(UTF8N)

class FugaController < ApplicationController

  def piyo
    render( :inline => "現在時刻は<%= Time.now %>だyo" )
  end

end

この状態で,下記のURLにブラウザからアクセス。

「現在時刻はSun Aug 14 13:39:41 +0900 2011だyo」という風な画面になればOK。


※もし「We're sorry, but something went wrong.」となった場合,chmodのし忘れである。

Ruby on Rails Permission denied sessionsエラー
http://mindia.jp/book/error/entry/748

以上で,Ruby on RailsアプリケーションをPassenger上で動作させる事ができた。


あとは,マイグレーションやM・V・Cをがりがりコーディングしてゆくだけ。

※/tmpではなく,ちゃんと/usr/local/ 上の開発フォルダ内にプロジェクトを作ろう。



補足:参考にしたURL


全体的な手順の流れ:

Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用
http://redmine.jp/tech_note/apache-passenger/

  • (Redmineの導入を視野に)passengerの導入からhttpd.confの設定まで
  • passenger:1.0.1


CentOS 5.4(EC2)にApache+PassengerでRails環境作る
http://ukstudio.jp/2010/03/29/apache_passenger_rails_for_centos/

  • Rubyのインストールからhttpd.confの設定まで
  • OS:CentOS5.4。Ruby:1.8.7。passenger:1.0.1


Passenger(mod_rails)の設定メモ
http://redmine.jp/tech_note/apache-passenger/

  • passengerの導入からhttpd.confの設定まで
  • passenger:1.0.1


Ruby on Rails を Apache2で動かす!
http://www.mk-mode.com/wordpress/2010/10/29002004/

  • passengerの導入から「.htaccess」設定まで
  • OS:CentOS。passenger:2.2.15


VPSホスティングサービス上で動作させたい場合:

お名前.com VPSプランでRuby on Rails環境の構築
http://b.ruyaka.com/2010/04/30/%E3%81%8A%E5%90%8D%E5%89%8Dcom-vps%E3%83%97%E3%83%A9%E3%83%B3%E3%81%A7ruby-on-rails%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89/

  • お名前.com@VPSの導入初期では勿論Ruby On Railsは使えません。Ruby on Rails on Passenger環境構築手順のメモ


Ruby on RailsをVPSで動かす
http://vps.fean.info/rails/with_apache
お名前.comのVPSのCentOS 5.3で実行したRuby on RailsとApache2を連携するための設定方法