Passengerを使いRailsアプリを公開する
RailsアプリをApacheで公開する必要があったので、Passengerを使うことにした。 その備忘録を残しておく。
同じ内容をGistでも残した。
環境
準備
Railsアプリのひな形を用意する。
$ rails -v Rails 4.1.0 $ mkdir ~/sample_app $ cd ~/sample_app $ rails new app --pre --skip-bundle $ vi Gemfile
Gemfile内のgem 'therubyracer', platforms: :rubyのコメントアウトを外す。
$ bundle install $ bundle exec rake db:migrate $ rails s
http://...:3000 でサイトが表示されれば、アプリの用意完了。
次にPassengerに必要なモジュールをインストールする
無ければ、適宜入れる。
$ sudo yum install -y gcc-c++ httpd httpd-devel apr-devel apr-util-devel
Passengerをインストールする
gemを使う。
$ gem install --no-rdoc --no-ri passenger $ passenger --version Phusion Passenger version 4.0.41 "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui
PassengerでApache用モジュールをビルドする
$ cd ~ $ sudo find . -name passenger-install-apache2-module ./.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.41/bin/passenger-install-apache2-module ./.rbenv/versions/2.0.0-p451/bin/passenger-install-apache2-module $ ./.rbenv/versions/2.0.0-p451/bin/passenger-install-apache2-module
また、このときにPassengerモジュールをApache内で読みこむための設定が出力されるので、httpd.confに追記する。
LoadModule passenger_module /home/togashik/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.41/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /home/togashik/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.41 PassengerDefaultRuby /home/togashik/.rbenv/versions/2.0.0-p451/bin/ruby </IfModule>
バーチャルホストの設定例も出力されるので、参考にするといい。 設定は自分の環境に合わせて、変更する。
<VirtualHost *:80> ServerName www.yourhost.com # !!! Be sure to point DocumentRoot to 'public'! DocumentRoot /somewhere/public <Directory /somewhere/public> # This relaxes Apache security settings. AllowOverride all # MultiViews must be turned off. Options -MultiViews </Directory> </VirtualHost>
最終的には、次のように変更した。
<VirtualHost *:80> ServerName *:80 RailsEnv development PassengerEnabled on DocumentRoot /home/togashik/sample_app/app/public <Directory /home/togashik/sample_app/app/public> AllowOverride all Options -MultiViews </Directory> </VirtualHost>
Apacheを再起動してみる。
$ sudo service httpd configtest
Syntax OK
$ sudo service httpd restart
次のようなエラーがでた。。
Starting httpd: httpd: Syntax error on line 221 of /etc/httpd/conf/httpd.conf: Syntax error on line 1 of /etc/httpd/conf.d/passenger.conf: Cannot load /home/togashik/.rbenv/versions/2.0.0- p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.41/buildout/apache2/mod_passenger.so into server: /home/togashik/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger- 4.0.41/buildout/apache2/mod_passenger.so: cannot open shared object file: Permission denied
パスが問題なければ、SELinuxが影響しているかもしれないので、無効にする。
$ sudo setenforce 0
もう一度再起動するとエラーが出ず、ページが表示されていれば成功だ。
参考
Amazon Linuxにrbenv+Ruby+Apache+Passengerの環境を作る - okochangのインフラ日誌
さくらVPS/entOS 6.4 Passengerのインストール手順 [Apache][Railsサーバへの道] - 酒と泪とRubyとRailsと