ホーム > カテゴリ > Ruby・Ruby on Rails >

Apache + PassengerでRailsとPHPを共存する [WSL/Ubuntu環境]

CentOSで各種サーバー構築(目次)

WindowsのWSL(Ubuntu)でApacheとPassengerでRuby on RailsとPHPを共存させます。Railsをlocalhost:80、PHPをlocalhost:8080とします。

前提条件

Apache/MariaDB/PHPとphpMyAdminのインストール

1. Passengerのインストール

// Passengerのインストール
gem install passenger
// Passengerのapache2モジュール
passenger-install-apache2-module

Enterキーを何度か押して赤色のエラーが出た場合はインストール方法を教えてくれます。私の場合は次の4つが不足していました。

sudo apt-get install libcurl4-openssl-dev
sudo apt-get install apache2-dev
sudo apt-get install libapr1-dev
sudo apt-get install libaprutil1-dev

// 再度、実行でコンパイルが開始されます。時間が掛かります。
passenger-install-apache2-module

次のようなメッセージが表示されるのでapache2.confの末尾に追記する。

sudo vi /etc/apache2/apache2.conf

LoadModule passenger_module /home/ユーザー名/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/passenger-6.0.4/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /home/ユーザー名/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/passenger-6.0.4
  PassengerDefaultRuby /home/ユーザー名/.rbenv/versions/2.6.5/bin/ruby
</IfModule>

// 見逃した方は次のコマンドで再度、確認可能です。
// passenger-install-apache2-module --snippet

次のようなwarning(警告)が出た場合は前回のメッセージ(LoadModule passenger_module ...)を/etc/apache2/apache2.confの末尾に追記します。

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/apache2/apache2.conf.

Detected 0 error(s), 1 warning(s).

// 再度、実行でコンパイルが開始されます。時間が掛かります。
passenger-install-apache2-module

2. apache2.confの編集

sudo vi /etc/apache2/apache2.conf

// 以下を末尾に追記する
AcceptFilter http none
AcceptFilter https none

3. バーチャルホストの設定

3-1. 8080ポートを追加する

sudo vi /etc/apache2/ports.conf

// 以下を追加する
Listen 8080

3-2. 000-default.confのバックアップ

// 元ファイルをバックアップする
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.bk

3-3. Rails側の設定 - ポート80

sudo vi /etc/apache2/sites-available/000-default.conf

次の例ではC¥プロジェクト¥publicを設定します。

<VirtualHost *:80>

  *** 省略 ***

  # プロジェクトのpublicを設定する
  DocumentRoot /mnt/c/myapp/public
  # development または production
  RailsEnv development 
  <Directory /mnt/c/myapp/public>
    PassengerEnabled On  
    AllowOverride all
    Options -MultiViews
    Require all granted
  </Directory>

  *** 省略 ***
  
</VirtualHost> 

以下は実行しなくて良い。 ※000-default.confは特別なファイル

// 設定の有効化
//sudo a2ensite 000-default.conf
// 設定の無効化
//sudo a2dissite 000-default.conf

3-4. PHP側の設定 - ポート8080

001-default.confファイルを作成します。

sudo vi /etc/apache2/sites-available/001-default.conf

ポートを8080。Passengerをオフへ。

<VirtualHost *:8080>                                                                                                        DocumentRoot /var/www/html
  <Directory /var/www/html>
    PassengerEnabled Off
    AllowOverride all
    Options -MultiViews
    Require all granted
  </Directory>
</VirtualHost>

001-default.confの設定を有効化する。

// 設定の有効化
sudo a2ensite 001-default.conf
// 設定の無効化
//sudo a2dissite 001-default.conf

PHPのテストファイル

// test.phpの生成
sudo vi /var/www/html/test.php

<?php
 phpinfo();
?>

4. Railsの設定

config/environments.rbに以下を追記します。

ENV['_PASSENGER_FORCE_HTTP_SESSION']="true" 

5. Apacheの再起動

sudo service apache2 restart 

6. アクセス

http://localhost:80 ※Railsは初期起動が遅い
http://localhost:8080/test.php

7. 各種エラー

Protocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT

2章の「apache2.confの編集」で解決。

Error starting web application

Passenger application server                Working
Preparation work before executing the app   Done
Web application                             Error

4章の「Railsの設定」で解決。

注意事項

ここまで書いてアレなんですが、WSLでPassengerは相性が悪いようです。GETで表示はできても、POSTデータが送信できないようです。無限ループになります。

解決策は次のように標準のPumaを起動すると良いです。

bin/rails s
または
bin/rails s -e production

Windows起動時に自動起動させるには次のコードも追加して下さい。

echo 'cd /mnt/c/プロジェクト' >> ~/.bashrc
echo 'bin/rails s -e production' >> ~/.bashrc

自動起動したPumaを停止するには「プロジェクト/tmp/pids/server.pid」を開いてプロセスID(番号)を確認して

kill プロセスID

でプロセスを強制終了させればOKです。

WindowsでRails開発

Windows10でRuby on Railsの開発環境を構築 [WSL/Ubuntu環境]
Apache/MariaDB/PHP/phpMyAdminの構築[WSL/Ubuntu環境]
Apache + PassengerでRailsとPHPを共存する [WSL/Ubuntu環境]
MariaDBでRailsプロジェクトを作成する [WSL/Ubuntu環境]
Apache/MariaDBをOS起動時に自動起動させる [WSL/Ubuntu環境]
WSLが起動しない時の対処方法 [WSL/Ubuntu環境]





関連記事



公開日:2019年12月07日 最終更新日:2019年12月10日
記事NO:02809