railsアプリをapacheで動かす方法
rails s でも、とりあえず動作確認できるけど、できれば専用のWebサーバであるapacheで動作させたい。
調べてみたら、Phusion Passengerというgemを使うのが一般的のようだ。
railsアプリをapacheで動かすには、以下の手順を踏めばいいらしい。
手順その1 gem install passenger
手順その2 passenger-install-apache2-module コマンド実行
手順その3 出てきたconfig設定をhttpd.confに書く
手順その1 gem install passenger
a) vi Gemfileで書き込む( gem ‘passenger’ )
b) bundle installで反映
手順その2 passenger-install-apache2-module コマンド実行
updatedb #全ファイルパスのDB更新。デフォだと1日1回
locate passenger-install-apache2-module #コマンドのフルパスを探してもらって実行。
対話式だけど、デフォルトのままで大丈夫。
サーバの状態を解析してApache用モジュールのコンパイルに数分かかるが、最終的に以下の様なconfig設定が出力されればOK!
LoadModule passenger_module /usr/local/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/passenger-5.0.29/buildout/apache2/mod_passenger.so
PassengerRoot /usr/local/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/passenger-5.0.29
PassengerDefaultRuby /usr/local/rbenv/versions/2.3.1/bin/ruby
手順その3 出てきたconfig設定をhttpd.confに書く
a) DocumentRootをrailsのpublicに指定する。
httpsの場合は、/etc/httpd/conf.d/ssl.conf
ヴァーチャルホストの場合は、/etc/httpd/conf.d/virtul
b) 手順その2の最後に出てきた設定をapacheに伝えるために新規ファイルを追加する
vi /etc/httpd/conf.d/passenger.conf
c) DocumentRoot/public/.htaccessに、動作環境を定義(productionにすれば本番環境)
1 |
RackEnv "development" |
これを忘れると、以下の様なエラー画面になってしまう(デフォルトは、product設定です。)
We’re sorry, but something went wrong.
We’ve been notified about this issue and we’ll take a look at it shortly.
d) apacheを再起動して、定義したURLにアクセスすれば表示されるはず
service httpd graceful
とりあえず、apacheで動作するようになったけど、なんか超重たい!
railsは遅いとは聞いてたけど、何秒もかかるようだと実用には耐えられ無さそう…。
複数のrailsアプリを同じサーバで動作させるには?
http://sample.co.jp/rails_project1/public
http://sample.co.jp/rails_project2/public
みたいな感じで問題なければ、そのまま配置すればいいだけ。
http://sample.co.jp/shop
http://sample.co.jp/sample
みたいな感じにするなら、
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# DocumentRoot直下に、rails_project/publicへのリンクを張る # 間違えちゃったら「unlink リンク先」でリンク削除される。 ln -s /var/www/vhosts/sample.co.jp/WWW/store/public /var/www/vhosts/sample.co.jp/WWW/shop ln -s /var/www/vhosts/sample.co.jp/WWW/test/public /var/www/vhosts/sample.co.jp/WWW/sample # railsアプリの数だけ、RailsBaseURIを設定 vi /etc/httpd/conf.d/ssl.conf DocumentRoot /var/www/vhosts/sample.co.jp/WWW RailsBaseURI /shop RailsBaseURI /sample # apache再起動 service httpd graceful |