Makefileを編集して PORTVERSION の行を目的のバージョン番号にした後、
make makesumを実行すると distinfo を書き換えてくれる。
できればdistinfoの中を見てMD5が正しいかどうかを目視する。
新しい奴はSubversion にも対応するようになってるけど、FreeBSD portsで作るのは失敗。 OpenSSLがpthread対応じゃないとダメーと途中で止まってしまう。 FreeBSDのOpenSSLはpthread対応のような気はするのだが…
とりあえずportsの標準状態に戻して Pound 1.2 を利用してみた。 Failoverでサーバが生きているかどうかは、connect(2) でTCPソケットが開けるかどうかだけチェックしている。 使ってみたら意外とCPUを食う。キャッシュ付きapacheプロキシよりCPU時間を消費する。
Cygwin環境から cscript jetsql.rb --mdb-file tako.mdb hoge.sql のようにして使うスクリプト。
いちいちAccess2000を起動せずにmdbファイルにSQL構文でデータをつっこんだり、テーブルの作成をしたりできる。
ファイルからSQLの投入は、クエリアナライザ同様 GO で区切って行われる。
<package>
<job id="jetsql">
<?job debug="false" error="false"?>
<script language="RubyScript">
require "win32ole"
require 'getoptlong.rb'
def usage
STDERR.puts "$Id: 03.rd2d 603 2003-09-09 08:38:42Z svn $"
STDERR.puts "help strings"
raise "exit_for_usage"
end
WScript.Arguments.each { |arg|
if arg =~ /^\-/ then
ARGV.push arg.sub(/[\r\n]+$/, "")
else
filename = `cygpath -m #{arg.sub(/[\r\n]+$/, "")}`
ARGV.push filename.sub(/[\r\n]+\z/, "")
end
}
parser = GetoptLong.new
parser.set_options(
['--mdb-file', '-m', GetoptLong::REQUIRED_ARGUMENT],
['--quiet', '--silence', '-q', GetoptLong::NO_ARGUMENT],
['--help', GetoptLong::NO_ARGUMENT],
['--version', GetoptLong::NO_ARGUMENT]
)
$OPT_MDB_FILE = ''
begin
parser.each_option do |name, arg|
eval "$OPT_#{name.sub(/^--/, '').gsub(/-/, '_').upcase} = '#{arg}'"
end
rescue
raise "getoptlong"
end
usage() if $OPT_HELP != nil
usage() if $OPT_VERSION != nil
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=#{$OPT_MDB_FILE}"
puts connectionString
raise "no_mdb_file" if $OPT_MDB_FILE.length == 0
conn = WIN32OLE.new "ADODB.Connection"
conn.ConnectionTimeout = 15
conn.CommandTimeout = 30
conn.CursorLocation = 3
conn.Open connectionString, "Admin", ""
module ADO_CONST
end
WIN32OLE.const_load conn, ADO_CONST
sql = ''
recordsAffected = 0
ARGF.each { |line|
next if line =~ /\A\#/
if line =~ /\AGO\s*\z/i then
puts sql
conn.execute sql, recordsAffected, ADO_CONST::AdExecuteNoRecords
sql = ''
next
end
sql += line
}
conn.Close
</script>
</job>
</package>
コードの前半はWindowsScriptingHostにおける引数の解釈をgetoptlong経由にするためのもの。
SQL投入するための後半部分はまあまあリーズナルブルなコードではないかと。
WIN32OLE.const_load conn, ADO_CONSTによる定数読み込みはとても便利。
異常終了するにはexit関数を呼ぶより、raiseで例外を起こしてしまう方がいいらしい。
ports 書き換えて最新版にするのはいいけど files の下にある patch-* よく見てからやらないと泣き見るよ。