【自宅サーバ Rails】ApacheとRailsを連携させる

  • このエントリーをはてなブックマークに追加

はじめに

前回Railsをインストールしました。Railsをwebサーバで動かそうとするとデフォルトではWEBrick上で動作するようになっています。しかし、WEBrickでは実運用には耐えられません。より高機能なApache上でRailsを動かしてみました。

RailsとApache連携の必要なもの

RailsとApacheを連携させるGem

# gem install passenger

Apacheモジュールのビルドとインストール

# passenger-install-apache2-module

対話形式で処理が開始。失敗。でも安心。必要なパッケージを提示してくれる。

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

Checking for required software...

 * Checking for C compiler...
      Found: yes
      Location: /usr/bin/cc
 * Checking for C++ compiler...
      Found: no
 * Checking for Curl development headers with SSL support...
      Found: no
      Error: Cannot find the `curl-config` command.
 * Checking for Zlib development headers...
      Found: yes
      Location: true
 * Checking for Apache 2...
      Found: yes
      Location of httpd: /usr/sbin/httpd
      Apache version: 2.2.15
 * Checking for Rake (associated with /root/.rbenv/versions/2.5.1/bin/ruby)...
      Found: yes
      Location: /root/.rbenv/versions/2.5.1/bin/ruby /root/.rbenv/versions/2.5.1/bin/rake
 * Checking for OpenSSL support for Ruby...
      Found: yes
 * Checking for RubyGems...
      Found: yes
 * Checking for Ruby development headers...
      Found: yes
      Location: /root/.rbenv/versions/2.5.1/include/ruby-2.5.0/ruby.h
 * Checking for rack...
      Found: yes
 * Checking for OpenSSL development headers...
      Found: yes
      Location: true
 * Checking for Apache 2 development headers...
      Found: no
 * Checking for Apache Portable Runtime (APR) development headers...
      Found: no
 * Checking for Apache Portable Runtime Utility (APU) development headers...
      Found: no

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 C++ compiler:
   Please install it with yum install gcc-c++

 * To install Curl development headers with SSL support:
   Please install it with yum install libcurl-devel

 * To install Apache 2 development headers:
   Please install it with yum install httpd-devel

 * To install Apache Portable Runtime (APR) development headers:
   Please install it with yum install apr-devel

 * To install Apache Portable Runtime Utility (APU) development headers:
   Please install it with yum install apr-util-devel

If the aforementioned instructions didn't solve your problem, then please take
a look at our documentation for troubleshooting tips:

  https://www.phusionpassenger.com/library/install/apache/
  https://www.phusionpassenger.com/library/admin/apache/troubleshooting/

提示されたとおりにyumでインストール

# yum install gcc-c++ libcurl-devel httpd-devel apr-devel apr-util-devel

あとはメモリが足らない場合にエラーがおきる。/var/log/messagesにエラーが出力されている場合はメモリを足す。

再度実行

# passenger-install-apache2-module
--------------------------------------------

Validating installation...

 * Checking whether this Passenger install is in PATH... ✓
 * Checking whether there are no other Passenger installations... ✓
 * Checking whether Apache is installed... ✓
 * Checking whether the Passenger module is correctly configured in Apache... (!)

   You did not specify 'LoadModule passenger_module' in any of your Apache
   configuration files. Please paste the configuration snippet that this
   installer printed earlier, into one of your Apache configuration files, such
   as /etc/httpd/conf/httpd.conf.


Detected 0 error(s), 1 warning(s).
Press ENTER to continue.


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

Deploying a web application

To learn how to deploy a web app on Passenger, please follow the deployment
guide:

  https://www.phusionpassenger.com/library/deploy/apache/deploy/

Enjoy Phusion Passenger, a product of Phusion® (www.phusion.nl) :-)
https://www.phusionpassenger.com

Passenger® is a registered trademark of Phusion Holding B.V.

どうやら上手くいったみたい!!

httpd.confの設定

# passenger-install-apache2-module --snippet

上記コマンドでapacheに設定するべき内容が表示されるのでその通りに設定する。
または、passenger-install-apache2-moduleでモジュールをインストールした時にapacheの設定が提示される。

--------------------------------------------
Almost there!

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

   LoadModule passenger_module /root/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /root/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/passenger-5.2.3
     PassengerDefaultRuby /root/.rbenv/versions/2.5.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.


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

設定後にapacheを再起動。エラー。

App 13232 stderr: Cannot execute "/root/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/passenger-5.2.3/buildout/support-binaries/PassengerAgent": Permission denied (errno=13)

これまでrootユーザ以下にrbenvを導入したので、/root以下はその他ユーザがリードできずエラーになってしまう。

dr-xr-x---.  12 root root 4096  4月 30 19:20 root

その他ユーザが権限0なので/root以下はみれないようになっている。よって/usr/loca/rbenv以下に.rbenvを移行。その際に気をつけるのはexport RBENV_ROOT="/usr/local/rbenv"を記入しないといけない。ユーザの~以下に導入する場合はいらなかったが、必要になる。selinux関係でエラーがでることも。

Railsの新しいプロジェクト作成

rails new プロジェクト名

あとは適時Virtualhost設定、ドキュメントルートにapacheが書き込みできる権限付与する。node.jsも必要。

成功