Web制作メモ -トップへ-

RubyをWeb上で動作確認する方法

Ruby2016.01.21 00:29

よく書籍などでローカルのプロンプト等で動作させて説明していますが、何か動いてるぞーという実感が湧かないのでWeb上で試しています。

ファイルの拡張子をrbで確認する方法と、htmlに埋め込んで動作させる方法の2つがあります。

ファイルに実行権が要らないので、後者の方が良いと思います。

rbファイルをWeb上で確認する方法

まずはApacheの設定ですが、CGIの実行許可がないと動きません。
通常付いていないので、動かしたいディレクトリに.htaccessを作りCGIの実行を許可します。これがないと「You don't have permission to access~」のエラーが出ます。

.htaccess

Options +ExecCGI

次にApacheの拡張子の扱いです。これがないとプログラムが処理されず内容がそのまま画面に出力されます。

.rbなら書かなくても良いかもですが、.rb以外の場合は必須です。書いても損は無いので、念の為書いておくと良いです。これも.htaccessに記述します。

.htaccess

AddHandler cgi-script .rb

今回は例として、最小限のHTMLファイルを作成してみます。
1行目のrubyへのパスは環境に合わせて適宜書き換えてください。

test.rb

#!/opt/rbenv/shims/ruby
puts 'Content-Type: text/html'
puts ''
puts '<!doctype html>'
puts '<html>'
puts '<head>'
puts '<meta charset="utf-8">'
puts '<title>拡張子rbのテスト</title>'
puts '</head>'
puts '<body>'
puts '拡張子rbのテスト'
puts '</body>'
puts '</html>'

最後にファイルに実行権を付与します。
これがないと「Internal Server Error」になります。

ファイルに実行権を付与

chmod 705 test.rb

htmlファイルにRubyを埋め込む方法

次は、Rubyに標準で入っているERBを使用して、htmlファイル内でrubyを実行する方法です。

まずは、HTMLへのアクセスがあった際に起動されるファイル「eruby.rb」を作成します。

eruby.rb

#!/opt/rbenv/shims/ruby
require 'erb'
require 'cgi'
puts 'Content-Type: text/html; charset=utf-8'
puts
ERB.new(IO.read(CGI.new.path_translated)).run

「eruby.rb」は公開ディレクトリのトップにアップロードするとすると、.htaccessは以下のように編集します。

.htaccess

Options +ExecCGI
AddHandler cgi-script .rb
AddType application/x-httpd-eruby .html
Action application/x-httpd-eruby /eruby.rb

下2行が今回の肝です。下から2行目の箇所を変えればhtml以外の拡張子でも動きます。「eruby.rb」を公開ディレクトリのトップ以外に配置したい場合は最終行を変更します。

今回は例として、最小限のHTMLファイルを作成してみます。
<%と%>で囲まれた部分のRubyが実行されます。

test.rb

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>無題ドキュメント</title>
</head>
<body>
<% puts "Hello Worlds22" %>
</body><pre>

最後に、「eruby.rb」ファイルに実行権を付与します。htmlファイルの方は実行権が不要です。

ファイルに実行権を付与

chmod 705 eruby.rb