NEST :: laboratory RSSフィード

引っ越しました。

http://ginpen.com

基本的にこちらの内容は残しておきます。
ただいくつかの記事については向こうへ持って行こうと思っています。


カレンダー
<< 2010/05 >>
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

本家はこちら: NEST http://nest.l-w-l.info

. archive / . bookmark

HTML, CSS, JavaScript中心に興味あることあれこれを扱う技術系blogです。昔はそうでなかったので、古いのには妙なものも混ざってるかもしれません。

なお全ては自分が理解した事の覚書的文書であるため、事実に反する場合があります。気付かれた方はご指摘頂ければと思います。

書いてる人 : 高梨ギンペイ@横浜でSEやってます。Twitter→@ginpei_jp

2010/05/22

Phusion Passengerを使ってRuby on RailsApacheで動かしてみた(Linux)

前回の続きです。「続きは明日」とか言っておきながら幾星霜……すみません。

前回 : ■Railsに特化した高速Ruby、"Ruby Enterprise Edition"をインストールしてみた (Linux)

Ruy on Railsアプリを作ったらscript/severでRails付属のHTTPサーバーWEBrickを起動して動作を確認すると思うんですが、いちいち起動するのも面倒ですよね。SSHでリモートログインとかしてると一度WEBrickを停止させないと他のことできないし。

そんな悩みを解消してくれるのがmod_railsことPhusion Passengerです。

公式サイト → Fast web server & app server, Ruby Python Node.js - Phusion Passenger

というわけで、やり方です。基本的には公式サイトのInstallのページの記述に従えばOKです。なおrootで作業します。

gemを取得

# gem install passenger

あっさり終わりました。続いてインストーラーを使ってApacheに組み込みます。

インストール

# passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v2.2.9.

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.

親切だなあ。超訳

ようこそ!

このインストーラーは、一通りのインストール手順をお伝えします。全部で3分もかからないですよ。

手順はこんな感じです。

  1. Apache2用のモジュールがインストールされます。
  2. Apacheの設定をして下さい。やり方はそのときお教えしますね。
  3. Ruby on Railsアプリケーションの公開方法についてもお教えします。

何か問題が起こっても心配しないで。インストーラーが問題解決のアドバイスをしますから。

というわけで、この先もあっさり終わるみたい。

Enterを押して続きを促す。

Checking for required software...

 * GNU C++ compiler... found at /usr/bin/g++
 * Ruby development headers... found
 * OpenSSL support for Ruby... found
 * RubyGems... found
 * Rake... found at /opt/ruby-enterprise-1.8.7-2010.01/bin/rake
 * rack... found
 * Apache 2... found at /usr/sbin/apache2
 * 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.

必要なソフトを確認中...

必要なソフトがいくつかインストールされていませんでした。

でも大丈夫、これからどうやってインストールするか、教えちゃいます!

Ruby Enterprise Editionのときと同じですね。インストール方法を教えてくれます。

Installation instructions for required software

 * To install Apache 2 development headers:
   Please run apt-get install apache2-prefork-dev as root.

 * To install Apache Portable Runtime (APR) development headers:
   Please run apt-get install libapr1-dev as root.

 * To install Apache Portable Runtime Utility (APU) development headers:
   Please run apt-get install libaprutil1-dev as root.

If the aforementioned instructions didn't solve your problem, then please take
a look at the Users Guide:

  /opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/passenger-2.2.9/doc/Users guide Apache.html

インストーラー先生の言う通りにパッケージをインストール。

# apt-get install apache2-prefork-dev libapr1-dev libaprutil1-dev

改めてインストーラーを起動。

# passenger-install-apache2-module

3分くらいで終了。

The Apache 2 module was successfully installed.

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

   LoadModule passenger_module /opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger.so
   PassengerRoot /opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/passenger-2.2.9
   PassengerRuby /opt/ruby-enterprise-1.8.7-2010.01/bin/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!

Apache 2用モジュールのインストールに成功しました。

Apacheの設定ファイルに、次の3行を追加して下さい。

...

追加したらApacheを再起動して下さい。これだけで他に設定しなくてもApacheで好きなだけRuby on Railsアプリを使うことができます。

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:

  /opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/passenger-2.2.9/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.

Ruby on Rails アプリを使う準備の例

/anywhere にRailsアプリを作ったとします。アパッチの設定ファイルにバーチャルホストの設定をして、/anywhere/public をDocument Rootにします。

...

はい、おしまい! セキュリティ最適化トラブルシューティング、その他諸々のお役立ち情報はこちら。

/opt/...

...

MultiViewsについてはこのあたり→ ApacheのMultiViews機能ってなに? - ITmedia エンタープライズ

というわけで、インストールまで終了ですです。

Apacheの設定ファイルを編集

それでは先ほどインストーラー先生が教えてくれた設定をやっちゃいましょう。

Apache2の設定ファイルを開きます。Apache2ではhttpd.confの代わりにapache2.confを使うみたいです。(あるいはmods-enabledとかにファイルを設置するべきかも……。)

# vi /etc/apache2/apache2.conf

ファイルの末尾*1に設定を追加。コピペするだけです。

LoadModule passenger_module /opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger.so
PassengerRoot /opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/passenger-2.2.9
PassengerRuby /opt/ruby-enterprise-1.8.7-2010.01/bin/ruby

さらにその下に、Railアプリごとの設定を追加。今回は /home/ginpei/www/mynote に作成したアプリの設定をすることにします。(適当なアプリの作り方は40秒で作るRailsアプリを参照して下さい。) なお、おそらくApacheでは既にあれこれが動いている事だろうと思うので、ポートは80ではなく8000を使用することにします。

<VirtualHost *:8000>
  # ServerName www.yourhost.com
  DocumentRoot /home/ginpei/www/mynote/public
  <Directory /home/ginpei/www/mynote/public>
    AllowOverride all
    Options -MultiViews
  </Directory>
</VirtualHost>

とりあえずローカルで動かすだけなので、ServerName は設定しません。

で、ここまでインストーラー先生の仰る通りなのですが、幾つか教えてくれない事があります。


インストーラーが教えてくれないこと1: ポートを開く

このままでは繋がりません。何故なら使用しているポートをApacheが開いていないからです。(80から8000に変えちゃいましたから。)

先述のApache設定ファイルにListen 8000を記述して、再起動して下さい。

<VirtualHost *:8000>
  # ServerName www.yourhost.com
  DocumentRoot /home/ginpei/www/mynote/public
  <Directory /home/ginpei/www/mynote/public>
    AllowOverride all
    Options -MultiViews
  </Directory>
</VirtualHost>
Listen 8000    # <= ADD!!
# /etc/init.d/apache2 restart

これでポートも開くようになりました。

インストーラーが教えてくれないこと2: Rails実行モードの設定

それでは画面を開いてみましょう。

f:id:ginpei:20100307060358p:image

We're sorry, but something went wrong.

We've been notified about this issue and we'll take a look at it history.

……あ、あれれ???

実はPhusion Passengerは、デフォルトではproductionモードで動作するようになっています。そのため、Railsデフォルトのdevelopmentモードでしか準備していない場合はエラーになってしまうし、またエラーも抑制されて、そのまま画面に出たりしないのです。

というわけで、developmentモードで動かすようにしましょう。

先述のApache設定ファイルに追記して、動作モードを変更するよう、RailsEnvを設定してやります。

<VirtualHost *:8000>
  RailsEnv development  # <= ADD!
  # ServerName www.yourhost.com
  DocumentRoot /home/ginpei/www/mynote/public
  <Directory /home/ginpei/www/mynote/public>
    AllowOverride all
    Options -MultiViews
  </Directory>
</VirtualHost>
Listen 8000
# /etc/init.d/apache2 restart

これでdevelopmentモードで動作するようになりました。おめでとう!

また、逆にアプリをproductionモードで動くようにしてやっても良いでしょう。というか実際に公開するときはそうする必要がありますよね。

とりあえず、DBを作ってやれば動きます。

rake db:migrate RAILS_ENV=production

Apacheの設定ファイルでdevelopmentモードの指定をした場合は、は元に戻して下さいね。

これでおしまいです。めでたし、めでたし、どっとはらい

*1viならShift+Gでジャンプできます。

WeZZardWeZZard 2012/06/20 09:40 Nice post! Solved my twisted problem! Thanks!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。