質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.94%

Rubyでクエリの表示ができません

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,309

score 12

Ruby初心者です
るびまのCGI入門をやっているのですが、「フォームのデータを表示させる」(http://magazine.rubyist.net/?0012-CGIProgrammingForRubyBeginners-2#l10)
という項目ができません
初心者ながらprintを多用したbar_echo1.rbのプログラムはあまり綺麗ではないと感じ、ERBを使って以下のbar_echo1.erbのように書き直しました
それに伴い、bar_echo1.htmlにも少し手を加えました
これでクエリを表示できるかと思ったのですが、何も表示されませんでした
どこが間違っているかわかる方いましたら、ぜひ教えてください
(点線以下2つが自分で考えたプログラムです)

##bar_echo1.html(オリジナル)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
  <title>form</title>
</head>
<body>
<form action="./bar_echo1.rb" method="get">
<div>
フォームです。<br>
<input name="t" value="">
<input type="submit" name="s" value="Button">
</div>
</form>
</body>
</html>

-------------------------------------------------

##bar_echo1.html(改良後)
<!DOCTYPE HTML>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>form</title>
</head>
<body>
<form action="./bar_echo1.erb" method="get">
<div>
フォームです。<br>
<input name="t" value="">
<input type="submit" name="s" value="Button">
</div>
</form>
</body>
</html>

##bar_echo1.erb
<html>
<head></head>
<body>
<%= ENV['QUERY_STRING'] %>
</body>
</html>

追記です
erbを使いたかったのとかなり前のプログラムだったので付録(デフォルト)のwebrickでは無く自前のwebrickを書いたのですがそれが原因の気がします...
##myserver.rb(自前)
require 'webrick'

config = {
    :Port => 8099,
    :DocumentRoot => './',
}

WEBrick::HTTPServlet::FileHandler.add_handler("erb", WEBrick::HTTPServlet::ERBHandler)

server = WEBrick::HTTPServer.new(config)

server.config[:MimeTypes]["erb"] = "text/html"

trap(:INT) do
    server.shutdown
end

server.start
##server.rb(デフォルト)
require 'webrick'

rrr = WEBrick::HTTPServlet::CGIHandler::Ruby
$ruby = $ruby || rrr

module WEBrick
  module HTTPServlet
    FileHandler.add_handler("rb", CGIHandler)
  end
end

def start_webrick(config = {})
  conf = {
    :Port => 8080,
    :BindAddress => '127.0.0.1',
    :CGIInterpreter => $ruby,
  }
  config.update(conf)  
  server = WEBrick::HTTPServer.new(config)
  yield server if block_given?
  ['INT', 'TERM'].each {|signal| 
    trap(signal) {server.shutdown}
  }
  server.start
end

start_webrick {|server|
  cgi_dir = File.dirname( File.expand_path(__FILE__) )
  server.mount("/", WEBrick::HTTPServlet::FileHandler, cgi_dir, {:FancyIndexing=>true})
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

erbって、デフォルトで処理されましたっけ………?
とりあえずhttpd(apacheかな?)のエラーメッセージを見ましょう。 /var/log/apache2/error_log とかそのへんにあるはず。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/04/23 02:52

    >>erbって、デフォルトで処理されましたっけ………?
    require 'erb'してみましたがダメでした
    また、このプログラムの前にも記載のプログラムをerbを使って書き直してみたのですが、そのときはrequireもせず動きました(まったく見当違いのことを言っていたらすみません...)

    >>とりあえずhttpd(apacheかな?)のエラーメッセージを見ましょう。...
    /var/log/apache2 の下には何もありませんでした
    webrickで動かしているのですが、そこに表示されるメッセージでも同じことですか?
    一応そこには(bar_echo1.htmlのフォームにappleと入力すると)
    "localhost - - [23/Apr/2015:02:42:21 JST] "GET /bar_echo1.erb?t=apple&s=Button HTTP/1.1" 200 16
    http://localhost:8099/bar_echo1.html -> /bar_echo1.erb?t=apple&s=Button"というメッセージがありました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.94%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る