View Full Version : 掲示板が動かない
ocean
2002/06/08, 10:49 AM
掲示板スクリプトを Ruby で作成したのですが、
うまく動いてくれません。
http://ocean.s7.xrea.com/bbs/index.cgi
bbs ディレクトリのパーミッションは 0705(推奨値)、
index.cgi は 0700、ログファイルは 0600 としています。
CGI はテスト済みでローカルでは正常に動いています。
(ローカルの Ruby のバージョンは 1.6.4、XREA では 1.6.7)
.htaccess も置いていません。
アップロードモードはアスキー、バイナリモードを両方試しましたが、
動きませんでした。
http://www.xrea.com/err500.htm
↑こちらにとばされてしまいます。
広告を入れないよう拡張子を .xcg にして同じ条件で試行
してみましたが、結果は同じでした。
スクリプト内では cgi.rb と kconv.rb と 自作ライブラリひとつ
を require しています。(自作ライブラリがいけないんでしょうか?(^^;)
どなたかアイデアや解決策をお持ちの方、どうぞ何か御教唆
お願いいたします。
raccy
2002/06/08, 09:04 PM
とりあえず、ソース等を見ないことには正確には言えないのが現状ですが、
とりあえず考えられる原因をあげます。
自作ライブラリはどこに置いていますか?
CGIと一緒にアップしてあるでしょうか?
その時、パスがおかしいとかはありませんか?
Shift_JISやEUC-JPなどで書いている時は、
#!/usr/local/bin/ruby -Ks
#!/usr/local/bin/ruby -Ke
等と、最初で指定した方がいいです。
たぶん、どこかでエラーが起きていると思われます。
エラー場所を特定する方法としては…。
begin
(ここにスクリプトの内容を書く)
rescue StandardError => e
print <<"EOF"
Content-type: text/html; charset="Shift_JIS"
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head><title>StandardError</title></head>
<body>
<p>
#{e}<br/>
#{e.backtrace.join("<br/>")}
</p>
</body></html>
EOF
rescue ScriptError => e
print <<"EOF"
Content-type: text/html; charset="Shift_JIS"
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head><title>ScriptError</title></head>
<body>
<p>
#{e}<br/>
#{e.backtrace.join("<br/>")}
</p>
</body></html>
EOF
end
上の自分のソースからのコピペですので、適当に変えてください。
(なぜか、XHTML1.1ですし…)
うーむ、久々のRubyの質問だから、張り切ってしまった…。
ocean
2002/06/09, 12:10 AM
raccy さん、レスどうもありがとうございます。
Originally posted by raccy
たぶん、どこかでエラーが起きていると思われます。
エラー場所を特定する方法としては…。
begin
(ここにスクリプトの内容を書く)
rescue StandardError => e
print <<"EOF"
Content-type: text/html; charset="Shift_JIS"
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head><title>StandardError</title></head>
<body>
<p>
#{e}<br/>
#{e.backtrace.join("<br/>")}
</p>
</body></html>
EOF
rescue ScriptError => e
print <<"EOF"
Content-type: text/html; charset="Shift_JIS"
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head><title>ScriptError</title></head>
<body>
<p>
#{e}<br/>
#{e.backtrace.join("<br/>")}
</p>
</body></html>
EOF
end
上の自分のソースからのコピペですので、適当に変えてください。
(なぜか、XHTML1.1ですし…)
rescue 節でインタープリット時のエラーを拾えるとは知りませんでした!
目からウロコです! これでこれからデバグがどんなに楽になることか…。
感謝です。
さっそく raccy さんが提示されたスクリプトを適用させていただいたところ、
単純なミスでこけていました(^^;;;
クッキーを取得して初期化されるはずのオブジェクトが初期化されず、
nil になっていたことが原因でした。
(ローカルでテストした時は既にクッキーが記録されていたので発生しなかったようです。)
どうもお騒がせいたしました。
raccy さんならおわかりかも知れないと思いますが、提示していただいた
スクリプトで、StandardError と ScriptError は Exception の
サブクラスなので
begin
rescue Exception => e
print <<"EOF"
Content-type: text/html; charset="Shift_JIS"
#{e.backtrace.join("<br />")}
EOF
end
等とすると両方の例外を一度に捕捉できると思います。
うーむ、久々のRubyの質問だから、張り切ってしまった…。
Ruby 楽しいですよね〜。Ruby で練習したおかげで C++ でも
OO チックなコーディングが楽にできるようになりました☆
raccy さん、どうもありがとうございました!
raccy
2002/06/09, 04:00 AM
Originally posted by ocean
raccy さんならおわかりかも知れないと思いますが、提示していただいた
スクリプトで、StandardError と ScriptError は Exception の
サブクラスなので
(略)
等とすると両方の例外を一度に捕捉できると思います。
いやー、StandardErrorとScriptErrorを別々に処理したかった
というよくわからない理由を考えながらつくっていたのが、
そのままになっているだけなので、気にしないで下さい。
あと、ローカルテストの時に、何でもかんでも捕らえられてしまうのも
いかがなものかと思ったりもしたもので…。
それに、上のアイデアは、オラのオリジナルではなくて、Tikiから盗んで来たものです。
他人のソースは勉強になりますよ〜〜。
Rubyってやっぱいいですな〜。
ocean
2002/06/09, 05:59 AM
Originally posted by raccy
いやー、StandardErrorとScriptErrorを別々に処理したかった
というよくわからない理由を考えながらつくっていたのが、
そのままになっているだけなので、気にしないで下さい。
あと、ローカルテストの時に、何でもかんでも捕らえられてしまうのも
いかがなものかと思ったりもしたもので…。
たしかに例えば exit も例外だそうですので、
begin
exit
rescue Exception => e
p e.backtrace
end
こんなコードを書くと exit が捕捉できちゃいますね(^^;
Ruby のオシャレさがでてます。
私の場合、文法エラーを検出するときと、ランタイムエラーを
検出するときで、コンソールと httpd をいちいち切り換えておりましたので、
全てのエラーを httpd を通して把握できるのはとても快適です(^^)
Originally posted by raccy
それに、上のアイデアは、オラのオリジナルではなくて、Tikiから盗んで来たものです。
他人のソースは勉強になりますよ〜〜。
Rubyってやっぱいいですな〜。
Tiki というのは、Wiki という、Webコンテンツの編集、追加を
Webブラウザ上から行なえるツールの Ruby 版だそうですね。
http://todo.org/
さっそくダウンロードしてみました。
raccy さん、貴重な情報をどうもありがとうございました。
vBulletin® v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.