Apache + PassengerでRailsとPHPを共存する [WSL/Ubuntu環境]
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環境]
関連記事
前の記事: | Deviseでログイン機能をつくる [Ruby on Rails] |
次の記事: | WSLのApache/MySQL(MariaDB)をWindows起動時に自動起動させる [WSL/Ubuntu環境] |