Hatena::ブログ(Diary)

130単位

2011-07-14

Apache CGIでRVMのRubyを動かす

簡単なRubyスクリプトをWebで表示したいと思い、調べてみました。

環境

Apache設定

LoadModule cgi_module modules/mod_cgi.so
AddHandler cgi-script .cgi
<Directory "/path/to/htdocs">
	Options +ExecCGI
</Directory>
sudo /etc/init.d/httpd reload

RubyCGIスクリプト

/path/to/htdocs/index.cgi

#!/usr/local/rvm/rubies/default/bin/ruby
print "Content-Type: text/html\n\n"

print <<HTML
<html>
<head>
</head>
<body>
Hello Ruby!
</body>
</html>
HTML
  • 1行目にRuby本体のファイルを指定
    • /usr/local/rvm/bin/rubybashスクリプトなので動かない
    • rubies/default のほうにしてバージョン変更に対応しやすく
  • 最初にContent-Typeと改行2つを出力
  • そのあとにHTMLなどのコンテンツを出力
  • 日本語を扱う場合は2行目に「# coding: utf-8
  • Apache実行ユーザーに対して実行権限追加
sudo chmod g+x index.cgi #groupがapacheの場合

ブラウザからindex.cgiにアクセスして表示されればokです。

Appendix

拡張子.rb で動かしたい場合
AddHandler cgi-script .cgi .rb
拡張子なしで動かしたい場合
<Files "filename">
	SetHandler cgi-script
</Files>
実行権限がないエラーログ

(13)Permission denied: exec of '/path/to/htdocs/index.cgi' failed

Rubyの指定がおかしいエラーログ

(8)Exec format error: exec of '/path/to/htdocs/index.cgi' failed

参考リンク

4873113814
Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集

4873113946
プログラミング言語 Ruby

関連記事

*1:関連記事参照