Hatena::ブログ(Diary)

arupaka-_-arupakaの日記

2015-02-20

データベースsqlite3をrubyのCGI (Web)経由で使うときの注意

データベースsqlite3をrubyCGI (Web)経由で使うときの注意。。

権限がなくてデータベースに書き込めないときになにもエラーをはかないで

はまるので注意.

2014-12-09

たぬきの絵を返すCGI

たぬきの絵を返すCGI

require 'open-uri'
#require 'cgi'

#cgi=CGI.new

f=open("http://upload.wikimedia.org/wikipedia/commons/thumb/5/51/Tanuki01_960.jpg/250px-Tanuki01_960.jpg","rb")
#f=open("http://www.yahoo.co.jp")
#f=open("http://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%8C%E3%82%AD#mediaviewer/File:Tanuki01_960.jpg")
#f=open("http://www.yahoo.co.jp")
type=f.content_type
puts "Content-Type: #{type}"
puts ""


#STDOUT.binmode
#cgi.out("image/jpeg"){open(f,"rb").read}

f.each{|i|
        puts i
}

#puts type

2014-12-08

シェルスクリプトのCGIの注意.

シェルスクリプトCGIの注意.

#!/bin/sh
echo "Content-Type: text/html"
echo ""
echo "test"

1行目と2行目の空白がないと

とかいわれる.

sudo cat /etc/httpd/logs/error_log | tail

 [Mon Dec 08 15:42:00 2014] [error] [client xxx.xxx.xxx.xxx] malformed header from script. Bad header=test: test.cgi

とりあえず,htmlで連携.

<html>
<head>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
        alert("test");
        $.get("../../../cgi-bin/test/test.cgi",
                function(data2){

                        alert(data2);
                        $("div").html(data2);
                }
        );



});

</script>


</head>
<body>
<div></div>



</body>

</html>

2014-08-20

CGIの起動

  • 設定ファイルの場所:

/etc/init.d/httpd

Directory "/var/www/html"

http://httpd.apache.org/docs/2.0/ja/howto/cgi.html

    • 設定ファイルの変更 /etc/init.d/httpd

(1)CGIの許可

<Directory /usr/local/apache2/htdocs/somedir>

Options +ExecCGI

</Directory>

(2)rubyの許可

#AddHandler cgi-script .cgi

↓変更

AddHandler cgi-script .cgi .pl

  • 再起動

/etc/init.d/httpd restart

    • CGIスクリプトの準備

全部必須(特に2行目も)

test1.cgi

#!/usr/bin/ruby
puts "Content-type: text/html\n\n"
puts "helloworld"

#!/usr/bin/rubyの部分は

which ruby

ででてくるもの.


    • CGIスクリプトの配置と実行権限

/var/www/cgi-bin/test1.cgi

に配置.http://localhost/cgi/test1.cgi にエーリアスされてる.

実行権限の付与

chmod 705 test1.cgi


http://www.searchman.info/fedoracore4_apply/sev1020.html

とかを参考にしました.

  • フォームから値をもらって表示する.

フォームの作り方は以下を参照

http://www.futomi.com/lecture/form/

test1.rb

#!/usr/bin/ruby
require 'cgi'
cgi=CGI.new

puts "Content-type: text/html\n\n"
puts cgi['main_keyword']
puts cgi['e_mail']

puts "helloworld"

test2.html

<head>
</head>
<body>
<h1>Test CGI ver1 </h1>
<hr>
<form action="/cgi-bin/test1.rb" name="js" method="post">
Keyword: <br>
<input type="text" name="main_keyword" value="test"> <br>
Email: <br>
<input type="text" name="e_mail"> <br>
And: <br>
<input type="text" name="and_key1"> <input type="text" name="and_key2"> <input type="text" name="and_key3"> <input type="text" name="and_key4">
<input type="text" name="and_key4">  <input type="text" name="and_key5">  <input type="text" name="and_key6"> <input type="text" name="and_key7">    <br>
Or: <br>
<input type="text" name="or_key1"> <input type="text" name="or_key2"> <input type="text" name="or_key3"> <input type="text" name="or_key4">
<input type="text" name="or_key4">  <input type="text" name="or_key5">  <input type="text" name="or_key6"> <input type="text" name="or_key7">    <br>
Not:<br>
 <input type="text" name="not_key1"> <input type="text" name="not_key2"> <input type="text" name="not_key3"> <input type="text" name="not_key4">
<input type="text" name="not_key4">  <input type="text" name="not_key5">  <input type="text" name="not_key6"> <input type="text" name="not_key7">    <br>

<input type="submit" name="submit" value="send"> <br>
</form>
</body>
</html>



ログの確認

httpd.confの

ServerRootを確認

/etc/httpd そこにある.

/etc/httpd/logs にあった.

ここから必須でないけど

rubyの更新

http://centos.bungu-do.jp/archives/000294.html

ruby-gems

http://centos.bungu-do.jp/archives/000294.html

http://www.adminweb.jp/apache/log/index1.html

sudo gem install nokogiri

sudo gem install mechanize

  • ruby内のsystemをつかってruby関数を呼ぶときは,

system(ruby test.rb) でなく,system(./testrb)

を使う.権限も調整. ファイル出力は全員に書き込み権限をあたえたフォルダをつくる.


/var/lib/alternatives