作者: 閑舎
日時: 2002/4/15(13:28)
HIDAKA Takahiro <cv8t-hdk@...-net.or.jp> さん writes.

> ===============================================================
> #!/usr/local/bin/ruby
> 
> $:.unshift('../rwiki/')
> $:.unshift('../rwiki/lib/')
> 
> RWIKI_URI = 'druby://localhost:8470'
> 
> ...
> 
> print pg.body_html(env)
> ===============================================================

これは期待通りに動きました。

> で、これをふくらませて、簡単な RWiki → HTML 変換を
> つくっちゃいました。
> 
> http://www.asahi-net.or.jp/~cv8t-hdk/archives/scripts/rwiki2html.rb

どうも template をうまく読み込んで加工できないというメッセージが出て、と
まってしまいます。で、スクリプトは

===============================================================
#!/usr/local/bin/ruby

$:.unshift('./rwiki/')
$:.unshift('./rwiki/lib/')

RWIKI_URI = 'druby://localhost:8470'

require 'rw-lib'
require 'drb/drb'
require 'kconv'
require 'cgi'

DRb.start_service()
rwiki = DRbObject.new( nil, RWIKI_URI )

env = Hash.new
env[ 'ref_name' ] = Proc.new {|cmd,name| CGI.escape(name) }

File.open("template.html", "r") do | fp |
  $template = fp.read
end

pgname = ARGV[0]
pgtoc = rwiki.page(pgname)

pgtoc.links.each do | link |
  pg = rwiki.page(link)

  @html = $template.sub(/\n/, "\n")
  File.open(link + ".html", "w") do | fp |
    @html.sub!(/<\%\s+@@title\s+\%>/, link)
    @html.sub!(/<\%\s+@@body\s+\%>/, pg.body_html(env))
    fp.print @html
  end
end
===============================================================

のようにし、template.html を

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title><% @@title %></title>
<link rel=stylesheet type="text/css" href="rwiki.css">
</head>
<body bgcolor="#ffffff">
<% @@body %>
</body>
</html>

のようにして取りあえず急場をしのぎました。

 また、cgi でファイルをアップロードする件ですが、

  ffileman 'Web Based File & Directory Manager'
    -> http://www.firidin.com/perl

というものを見つけ、セットしてみると、うまくいきました。SSL で保護された
状態でのみ使えるように、

  unless( $referer =~ /^https*:\/\/(www\.)*$ENV{'SERVER_NAME'}$scriptname/ )

を(ffileman.cgi, ffileman_upload.cgi の 2 箇所)

  unless( $referer =~ /^https:\/\/(www\.)*$ENV{'SERVER_NAME'}$scriptname/ )

としました。また文字コードが化けるので、ffileman_english.cgi を

  $charset = "shift_jis";

に変更しました。もう少し使ってみて、セキュリティの具合とか確認したいと思
いますが、かなりいい感じです。複数ファイルやフォルダごとのアップロードが
ちと面倒なので、Ruby から Tcl/Tk を使って GUI 化したインターフェースでも
書き、これらが実現できたとしたらいうことはないです。

--
本田博通(閑舎)
Hiromichi Honda <raku@...>