調べてみたのですが、突破口を見いだせないのでお分かりになる方がいらしたら教えて下さい。
事象
-
Vagrant(CentOS 6.5) + rbenv + ruby-buildでruby環境を構築
-
Apache2経由でブラウザから"Hello world"したindex.rbファイルを見ても
500 Internal Server Error
が出て動作しない -
ruby index.rb
するときちんと出力される -
フォルダやファイルへのパーミッションは問題ない(755)
-
perlはApache経由で見てみましたがちゃんと動作しました
#!/usr/bin/env ruby
print "Content-Type: text/html\n\n";
print "Hello World\n";
Apacheのエラーログ
[Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1] /usr/bin/env:
[Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1] ruby
[Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1] : No such file or directory
[Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1]
[Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1] Premature end of script headers: index.rb
調査結果
Apacheのエラーログでぐぐってみると、1行目のrubyへのパス記述が原因の模様。考えられる原因は以下。
- 改行コードがLFではなくCR+LFになっているため、動作しない。
- パスが間違っている
1はLFだと確認できているので問題なし(GNU nanoで作成)。
2がおそらく問題ぽいのですが、いろんなパスを試してみても同じ状況です(/usr/bin/rubyや/usr/local/bin/rubyも試しました)
Options +ExecCGI
AddHandler cgi-script .cgi
AddHandler cgi-script .pl
AddHandler cgi-script .rb
# .bash_profile
# User specific environment and startup programs
export PATH="/usr/local/rbenv/bin:$PATH:$HOME:/usr/bin"
eval "$(rbenv init -)"
rubyの場所は以下です(rbenvなのでホームディレクトリ以下)。rbenvで導入したRubyのパス - べたな雑記帳によると、#!/usr/bin/env ruby
で良いらしいですが・・
# which ruby
~/.rbenv/shims/ruby
なお、Rubyは以下を見てインストールしました(コマンド内容も含め一緒)
http://brightechno.com/blog/archives/10
追記:解決しました
コメント欄で親切に教えていただき、解決しました。
まず/etc/sysconfig/httpd
に以下を追加
export PATH=/home/vagrant/.rbenv/shims:$PATH
そして再起動(sudo service httpd restart
)
次にApacheがホームディレクトリにアクセスできるようにしてやる
sudo chmod a+rx /home/vagrant
これで解決しました。