Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
39
Help us understand the problem. What is going on with this article?
@taccaya

Apache上でRailsのアプリケーションを動かすためにやったこと

More than 3 years have passed since last update.

apache-logo.png

先日、8時間ほどかけて、RailsのアプリケーションをApache上で動くように設定した。Passengerを使うことでスムーズにRailsアプリを実行できると思いきや、いくつかハマってしまった点があったので、それらも含めて、簡潔にまとめておく。

環境

Rails : 5.1.6
OS : CentOS Linux release 7.4

Apache(アパッチ)とは

Apache HTTP Serverは、世界中でもっとも多く使われているWebサーバソフトウェアである。コンピュータにApache(Webサーバソフトウェア)を入れると、そのコンピュータはWebサーバとしての仕事ができるコンピュータになる。

Passengerとは

Passengerは、Railsアプリを実行するためのApacheモジュールで、Apache単独でRailsアプリケーションを実行できるようにするもの。

Apacheのインストール

yum(linuxのパッケージ管理システム)を使ってインストールを行う。Apacheはhttpdというパッケージ名で提供されているので、yum installコマンドにパッケージ名httpdを指定してインストールする。

$ yum -y install httpd

Passengerのインストール

passengerはgemからインストールする。

$ gem install passenger

ApacheにPassengerモジュールをインストール(連携)

$ passenger-install-apache2-module

上記のコマンドを実行すると、インストールに必要なモジュールのチェックが実行され、チェックの結果が表示される。インストール必要なモジュールがある場合、以下のような指示がなされてインストールが途中で終了する。

terminal.例
 * To install Curl development headers with SSL support:
   Please run yum install curl-devel as root.

指示に従い、必要なモジュールをインストールする。

$ yum -y install curl-devel

もう一度コマンドを実行

$ passenger-install-apache2-module

が、、いつまでたってもインストールが終了しないので、『ctrl+c』でコマンドを強制終了。結論としては、仮想環境のLinuxに割り当てたメモリが少なかったことが原因だった。Linuxをシャットダウンして、Virtual Boxでメモリ割り当ての設定を500MBから1000MBに変更し、再度実行。

参考:VirtualBox - 仮想マシンのメモリ容量を変更

インストールがうまく進むと、以下のような画面が表示されて一旦処理が止まる。

terminal.実行結果の一部
--------------------------------------------
Almost there!

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

   LoadModule passenger_module /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4
     PassengerDefaultRuby /home/vagrant/.rbenv/versions/2.4.1/bin/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER when you are done editing.


--------------------------------------------

上記の

LoadModule passenger_module /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4
     PassengerDefaultRuby /home/vagrant/.rbenv/versions/2.4.1/bin/ruby
   </IfModule>

の部分が、Apache設定ファイルへの追記に必要なのでメモしておく。

Apacheの設定

passenger.confの設定

passenger-install-apache2-moduleで出てきた情報(先ほどメモした情報)を、apacheのconfigに記述。(ディレクトリ(/etc/httpd/conf.d/)にpassenger.confファイルとして記述)※passenger.confファイルは新規に作成する。

$ vi /etc/httpd/conf.d/passenger.conf
/etc/httpd/conf.d/passenger.conf
LoadModule passenger_module /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4
     PassengerDefaultRuby /home/vagrant/.rbenv/versions/2.4.1/bin/ruby
   </IfModule>

httpd.confの設定

ServerNameを変更しておく。

$ vi /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf
ServerName localhost:80

#自分のサーバのドメインやIPアドレスに変更

Apacheのバーチャルホストを指定

rails.confファイルに、DocumentRoot(Railsのファイルへのパス)やポート番号を記述。

/etc/httpd/conf.d/rails.conf
<VirtualHost *:80>

  ServerName localhost:80
# 自分のサーバのドメインやIPアドレスに変更

  DocumentRoot /home/vagrant/rails_app/public
#DocumentRootは、各自Railsアプリケーションのpublicが置かれているパスを記述。

  RailsEnv development
  PassengerEnabled on
  ErrorLog /var/log/httpd/error_log
  CustomLog /var/log/httpd/access_log combined
  AddDefaultCharset UTF-8

  <Directory /home/vagrant/rails_app/public>
#Directoryも同じく、Railsのpublicが置かれている場所のパスを記述

     AllowOverride all
     Require all granted
     Options -MultiViews
  </Directory>

</VirtualHost>

※ここで、Directoryのパスを記述するのを忘れていて、「Apacheは正常に起動しているのに、ブラウザでRailsのアプリケーションを表示できない」と2時間ほどハマった。Firewallなどの設定を見直していたが、ディレクトリの場所が指定されていなかっただけだった。。

httpd.confの設定をチェック

Apacheを起動させる際、設定ファイルである「httpd.conf」に誤った記述があると、エラーが発生してApacheを起動することができないので、事前に文法エラーがないかどうかチェックを行う。

$ apachectl configtest
> Syntax OK

Apacheの起動

$ sudo systemctl start httpd.service

これで、localhost:80、もしくは「CentOS7で設定したIPアドレス:80」でRailsのアプリが表示されれば終了。※startの部分をrestartに変えると再起動、stopでApacheは停止する。

Apacheの自動起動を設定する

自動起動設定ON

$ systemctl enabled httpd.service

自動起動設定OFF

$ systemctl disable httpd.service

自動起動設定をONにしていると、CentOS7が起動すると、Apacheも自動で起動してくれるようになるので便利。

参考:

Apache上でRuby on Railsアプリケーションを動かす
Passenger のインストール、Apacheとの連携
CentOS 7 サービス自動起動設定

39
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
taccaya

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
39
Help us understand the problem. What is going on with this article?