Ruby on RailsはRubyで作られているオープンソースのWebアプリケーションフレームワークですが、Webサーバーの機能も用意されています。そのためこの機能を活用すれば、nginxのようなWebサーバが設定されていない開発環境でも、Webブラウザによるチェックが可能です。
今回はRuby on RailsのWebサーバーを起動するrails serverの使い方を紹介します。
Ruby on RailsのWebサーバー機能
Ruby on RailsにはWebサーバー機能が組み込まれており、nginxやApache httpdに設定したWebサーバーでなくても簡単に開発中のWebシステムをデバックできます。もしLinuxの開発環境でRuby on Railsの開発を始めたのなら、rails newコマンドで新規アプリケーションの環境を作って、さっそくWebサーバーを起動してみましょう。
Webサーバー機能に詳しくない方のために、まずは起動方法とその機能について紹介します。
Webサーバーの基本
今回紹介するRuby on RailsのWebサーバー機能とは、クラウド上にあるWebサーバーの簡易版で、Ruby on Railsに組み込まれているpumaで実現します。
なお、Webサーバーの基本的な機能とは、Webブラウザからのリクエストを受け、それに応じてWebページを構成するHTMLや画像などをWebブラウザ送信します。そしてWebブラウザとの通信手順の規格が決まっており、その規約に従っていればRubyで作ることも可能です。
ただし、pumaは簡易版であり、nginxやApache httpdなどのWebサーバーと同じような機能はありません。開発用など限定的な用途で使えるWebサーバーと考えてください。
RailsのWebサーバーを起動する
Ruby on RailsのWebサーバー機能は、アプリケーションの初期設定さえ実行すれば、railsコマンドで起動できます。まずはターミナルなどでアプリケーションの初期設定を実施してください。
Ruby on Railsのアプリケーションの初期設定コマンドの例
$ rails new app1
そして、そのアプリケーションのディレクトリに移動し、次のコマンドを実行することで、Webサーバーが起動します。
Ruby on RailsのWebサーバーを起動するコマンド
$ rails server
Webブラウザで表示してみる
rails serverによるWebサーバーが正常に起動すると、ターミナルに下記のようなメッセージが表示されます。これでWebブラウザからのリクエストを受け付ける状態です。
$ rails server => Booting Puma => Rails 6.1.4.1 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma version: 5.5.0 (ruby 3.0.1-p64) ("Zawgyi") * Min threads: 5 * Max threads: 5 * Environment: development * PID: 1805 * Listening on http://127.0.0.1:3000 * Listening on http://[::1]:3000 Use Ctrl-C to stop
上記のメッセージに従い、開発環境のWebブラウザで下記のURLを指定することでRailsのデフォルト情報ページが表示されます。
http://localhost:3000
なお、URLに記載された「:3000」はポート番号で、Webブラウザは指定しなければ80または443を使います。Ruby on RailsのWebサーバーはデフォルトのポート番号ではなく3000版を使うので注意してください。
ターミナルのメッセージをチェック
rails serverを実行し、Webブラウザによるアクセスが成功すると、ターミナルにはメッセージが表示されます。ここにはWebブラウザからのアクセスログの他、Rubyのエラーメッセージなども表示されるので、作成したプログラムの動作チェックにも利用可能です。
なお、rails seeverを実行した直後に表示された「Use Ctrl-C to stop」のメッセージのとおり、このターミナルで「Ctrl-C」を打ち込むと、Ruby on RailsのWebサーバーが停止します。また、ターミナルを消してしまってもWebサーバーが停止してしまうので注意してください。
rails serverをカスタマイズする
先ほどrails serverコマンドによるWebサーバーの起動手順を紹介しましたが、誤ってターミナルを消してしまうとWebサーバーも停止してしまうのは不便です。しかしrails serverコマンドは、オプションでその動作をカスタマイズでき、デーモンのように動作させることもできます。次からそのようなrails serverをカスタマイズする方法を紹介します。
rails serverのオプションを使う
先ほどRuby on RailsのWebサーバーを起動するコマンドを紹介しましたが、この方法で起動したターミナルにはメッセージが表示されるのでデバックにも利用可能です。
ただし、ターミナルを幾つも開いて開発していると、Webサーバーを起動したターミナルを誤って消してしまうこともあります。そこでオプションを指定することでデーモンとしてサーバーを起動できます。また、ポート番号を3000からWebブラウザのデフォルトである80に変更することも可能です。
次にrails serverで使えるオプションを紹介します。
-p, –port=port サーバを起動するときのポート番号を指定 3000 -b, –binding=ip バインドするIPアドレスを指定 0.0.0.0 -c, –config=file rackupファイルを指定 -d, –daemon デーモンとしてサーバを起動 -u, –debugger デバックモード -e, –environment=name 環境(test/development/production)を指定してサーバを起動 development -P, –pid=pid PIDファイルを指定 tmp/pids/server.pid -h, –help ヘルプを表示
カスタマイズ例:デーモンとして起動する
先ほど紹介したrails serverのオプションの「-d」または「-–daemon」を指定することで、Webサーバーをデーモンとして起動できます。これにより、ターミナルを誤って消してしまってもWebサーバーがデーモンとして残るので、Webブラウザによるデバックに利用可能です。
デーモンとして起動する例
$ rails server --daemon
なお上記のコマンドでWebサーバーを起動すると、その実行ログはコマンドを起動したディレクトリのlogの下にあるdevelopment.logに出力されます。動作をチェックしたい場合は、このファイルをチェックしてください。
またWebサーバーの起動の有無をチェックする場合は、psコマンドなどで「puma」というプログラムをチェックしてください。
デーモンで起動したWebサーバーの有無をチェックするコマンドの例
$ ps -ef | grep puma user 3347 1 0 15:47 ? 00:00:00 puma 5.5.0 (tcp://localhost:3000) [/]
カスタマイズ例:ポート番号を変更する
複数のWebサーバーを使っている場合など、デフォルトのポート番号を変更したいケースがあります。そのような場合は、「–port」オプションでポート番号を指定します。
ポート番号を指定してWebサーバーを起動した例
$ rails server --port=3001
なお、今使われているポート番号をチェックするには、lsofコマンドなどを利用してください。
lsofコマンドの使用例
$ lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 3347 h-ueno 13u IPv4 55082 0t0 TCP localhost:3000 (LISTEN) ruby 3347 h-ueno 14u IPv6 55083 0t0 TCP ip6-localhost:3000 (LISTEN)
上記の例では、localhost:3000がリクエスト受け入れ状態です。
サーバーが起動しない場合
Ruby on Rilasのデバックを再開するためrails serverコマンドを実行したら、エラーで停止してしまうことがあります。そして大抵の場合、このようなエラーの原因は簡単な理由です。コマンド実行時のメッセージをよくチェックして対策してください。
次からサーバーが起動しない場合の対応手順について紹介します。
既にWebサーバーが起動している
rails serverコマンドでWebサーバー起動すると、デフォルトではポート番号3000を使い、Webブラウザからのリクエストに応答します。しかし、ポート番号は1つのプログラムにしか割り当てできません。そのため、既にポート番号を使用しているプログラムが動いていると、Webサーバーが起動できずにエラーが発生します。
次のようなメッセージが表示されたら、先ほど紹介したコマンドでポート番号の利用状況をチェックしてみてください。
既にWebサーバーが起動している場合のメッセージの例
A server is already running. Check /home/www/rails/app1/tmp/pids/server.pid. Exiting
ロックファイルを削除する
先ほどのように3000番ポートを使用しているデーモンが無いのに、既にそのポートが使われている、と表示されることがあります。これは、Webサーバーが正常に正常に終了しなかったことで、ロックファイルが残っているのが原因です。
通常、開発環境を正常にシャットダウンすると、OSが停止する前にロックファイルが削除されます。しかし、突然電源が切れたなど、正常にシャットダウンできなかった場合、ロックファイルは削除されません。このような場合は、ロックファイルを削除してしまえば、Webサーバーを起動させることが可能です。
なおロックファイルは、Ruby on Railsのアプリケーションを構成するディレクトリのうち、tmp/pidsの下にserver.pidというファイルがあるのでチェックしてみてください。
ロックファイルを削除する例
$ ls tmp/pids server.pid $ rm tmp/pids/server.pid
まとめ
これまで紹介したようにrails serverコマンドを使うことで、手軽にWebサーバーを起動でき、開発中のWebシステムのテストに利用できます。なおオプション無しでも起動できますが、デーモンとして起動できたり、ポート番号を変更できるなどのカスタマイズも可能です。Ruby on Railsを利用する際には、ぜひ、活用してください。