さくらVPS PassengerにてRubyを動かす

今回はApache上でRubyを動かすためにPassengerをインストールする。

Passengerのインストール

[hogehoge@ ~]$ gem install passenger ←passengerのインストール

PassengerをApacheのモジュールとしてインストール

[hogehoge@ ~]$ rvmsudo passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v3.0.7.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.
ここでEnterキーを押すと必要なソフトのチェックが行われる。
--------------------------------------------
Checking for required software...

 * GNU C++ compiler... found at /usr/bin/g++
 * Curl development headers with SSL support... not found
 * OpenSSL development headers... found
 * Zlib development headers... found
 * Ruby development headers... found
 * OpenSSL support for Ruby... found
 * RubyGems... found
 * Rake... found at /home/hogehoge/.rvm/wrappers/ruby-1.9.2-p290@rails3/rake
 * rack... found
 * Apache 2... found at /usr/sbin/httpd
 * Apache 2 development headers... not found
 * Apache Portable Runtime (APR) development headers... not found
 * Apache Portable Runtime Utility (APU) development headers... not found
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.
ここで不足しているソフトを入れるため一旦Ctrl-Cで抜ける。
[hogehoge@ ~]$ sudo yum install curl-devel httpd-devel apr-devel ←不足ソフトを追加
======================================================================================================
 Package                    Arch             Version                          Repository         Size
======================================================================================================
Installing:
 apr-devel                  x86_64           1.2.7-11.el5_6.5                 updates           238 k
 curl-devel                 x86_64           7.15.5-9.el5_6.3                 updates           317 k
 httpd-devel                x86_64           2.2.3-45.el5.centos.1            updates           149 k
Installing for dependencies:
 apr-util-devel             x86_64           1.2.7-11.el5_5.2                 base               53 k
 cyrus-sasl-devel           x86_64           2.1.22-5.el5_4.3                 base              1.4 M
 db4-devel                  x86_64           4.3.29-10.el5_5.2                base              2.0 M
 expat-devel                x86_64           1.95.8-8.3.el5_5.3               base              129 k
 libidn-devel               x86_64           0.6.5-1.1                        base              239 k
 openldap-devel             x86_64           2.3.43-12.el5_6.7                updates           1.6 M

Transaction Summary
======================================================================================================
Install       9 Package(s)
Upgrade       0 Package(s)

Total download size: 6.0 M
Is this ok [y/N]: y ←インストール開始
Complete!

もう一度、インストールを試みる。

[hogehoge@ ~]$ rvmsudo passenger-install-apache2-module
--------------------------------------------
The Apache 2 module was successfully installed.

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

 LoadModule passenger_module /home/hogehoge/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.7/ext/apache2/mod_passenger.so PassengerRoot /home/hogehoge/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.7 PassengerRuby /home/hogehoge/.rvm/wrappers/ruby-1.9.2-p290@rails3/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.

入ったぽい。青文字の部分はPassengerの動作設定となるので、必ずメモを取る
その後Enter を押す。すると今度はドキュメントルールに関する設定が出力されるので、これもメモる

--------------------------------------------
Deploying a Ruby on Rails application: an example

Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      DocumentRoot /somewhere/public    # <-- be sure to point to 'public'!
      <Directory /somewhere/public>
         AllowOverride all              # <-- relax Apache security settings
         Options -MultiViews            # <-- MultiViews must be turned off
      </Directory>
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:

  /home/hogehoge/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.7/doc/Users guide Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.

Apacheの設定

Passenger用のhttpd設定を行う。
httpd.confを直接編集しても良いがhttpd.confは、/etc/httpd/conf.d/以下を読込むようになっているので、そこにPassengerの設定を別ファイルとして作成する。

[hogehoge@ ~]$ sudo vi /etc/httpd/conf.d/passenger.conf

  1 # Passengerの基本設定
  2 LoadModule passenger_module /home/hogehoge/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
  3 PassengerRoot /home/hogehoge/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.7
  4 PassengerRuby /home/hogehoge/.rvm/wrappers/ruby-1.9.2-p290@rails3/ruby
  5
  6 # Passengerのチューニング設定
  7 # インスタンス最大数
  8 PassengerMaxPoolSize 2

httpdを再起動する。

[hogehoge@ ~]$ sudo service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

Railsアプリを作成し動作確認

[hogehoge@ ~]$ mkdir -p workspace/rails
[hogehoge@ ~]$ cd workspace/rails
[hogehoge@ rails]$ rails new railstudy -d mysql ←プロジェクトを作成(カレントディレクトリに作成される。)
      create
      create  README
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
      create  app
      ・
      ・
      ・
      run  bundle install
     ・
      mysql.h is missing. please check your installation of mysql and try again. ←こんなメッセージがでてmysql2が入らないみたい
     ・

mysqlのヘッダーがないってないみたいなので以下のコマンドを実行

[hogehoge@ ~]$ yum --disableplugin=priorities install mysql-devel

再度Railsアプリを作成

[hogehoge@ rails]$ rails new railstudy -d mysql
 ・
 ・
 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

成功したみたいです。
次に公開用ディレクトリの作成

[hogehoge@ ~]$ sudo mkdir -p /var/www/html/rails ←Apacheのルートディレクトリ以下に公開用のディレクトリを作成
[hogehoge@ ~]$ cd /var/www/html/rails
[hogehoge@ rails]$ sudo ln -s ~/workspace/rails/railstudy/public/ railstudy ←シンボリックリンクを貼る

ブラウザよりhttp://***.***.***.***/rails/railstudy/へアクセスしてみる。
”Forbidden”と表示されアクセスできない。

調査したところホームディレクトリ(/home/hogehoge)のパーミッションが700でオーナー以外アクセスできなくなっていたためだった。
セキュリティ的にどうかと思うがとりあえずホームディレクトリのパーミションを711へ変更することでアクセス可能になった。

これで再度、http://***.***.***.***/rails/railstudy/へアクセスすると
”Welcome aboard”の画面が表示される。
しかし、リンク:”About your application’s environment”をクリックすると
”Not Found The requested URL /rails/railstudy/rails/info/properties was not found on this server.”
と表示されてしまう。

どうもApache側に設定が足りなかったようだ。
以下の設定を追加

[hogehoge@ rails] cd /etc/httpd/conf.d
[hogehoge@ conf.d] vi passenger.conf
 RackEnv development ←追加
 RailsBaseURI /rails/railstudy ←追加

再度、http://***.***.***.***/rails/railstudy/へアクセスすると
”Welcome aboard”をクリックするとPassengerのエラー画面が表示される。
エラーメッセージを読むと

Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

Rails3.1からはJavaScriptのランタイムが必要らしい。
(bundleで入ったと思われるexecjs という gemで環境にあるランタイムの中から勝手にJavaScript の処理系を上手いこと持って来て動かしてくれるらしい。だからとりあえずランタイムを入れればOK)

Node.jsを入れる。(therubyracerでもOKだけど後々Node.jsの勉強もしたいのでこの段階で入れておく。)
rvmのNode.js版みたいはnvmというものがあるみたいなのでそれで入れる。
(naveってのもあるけどnvmのほうが良さそう)

[hogehoge@ ~] git clone --depth 1 git://github.com/creationix/nvm.git ~/.nvm  ←最新のリビジョンだけ取得=--depth 1
[hogehoge@ ~] . ~/.nvm/nvm.sh ←source(.)コマンドで環境変数に読み込ませる。
[hogehoge@ ~] nvm install v0.4.12
[hogehoge@ ~] nvm use v0.4.12 ←利用するバージョンを設定
[hogehoge@ ~] node -v
 v0.4.12  ←OK

サーバへのログイン時に毎回実行しなくてもいいように、.profileファイルなどに以下のように追加しておきます。

[hogehoge@ ~]  vi ~/.bash_profile
 . ~/.nvm/nvm.sh ←追加
 nvm use v0.4.12 ←追加

これでサーバを再起動して”Welcome aboard”を再度クリックしてみたけど、やっぱり

Could not find a JavaScript runtime

って怒られる。。

【Passengerを一旦やめてWEBrickで試してみた】
※iptableでWEBrickの標準ポート(3000)は閉じてるのでiptableを編集するか、
WEBrickを80ポートで起動するかしないといけないよ。

”Welcome aboard”をクリックするとMySQLへのコネクションエラーが出た。
database.yml の設定を忘れてた。

[hogehoge@ railstudy] vi config/database.yml
 password:_********* ←追加(最初に半角スペースを入れないと行けない)

再度、”Welcome aboard”をクリックすると次はActiveRecord::ConnectionNotEstablishedとエラーが出た。DB作ってなかった。

[hogehoge@ railstudy] rake db:create ←DBを作成

そして再度、”Welcome aboard”をクリックするとやっと詳細画面が表示された。

しかし、Passengerだと

Could not find a JavaScript runtime

と表示され、JavaScriptのRuntimeが認識されない。
調べたけどちょっとわからなかったのでNode.jsはあきらめて
”therubyracer”を入れることにする。

[hogehoge@ railstudy] vi Gemfile
 gem 'therubyracer' ←追加
[hogehoge@ railstudy] bundle install

”Welcome aboard”をクリックすると詳細画面が表示された。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中