qwik.jp から独自 qwikWeb サイトへの移行

Mar 8, 2007 From: fukui556@o...

福居です。

これまで qwik.jp で運用していたメーリングリストを
自分のサイトで立ち上げた qwikWeb に移行したいと考えています。

編集ページからサイトアーカイブを取得し、独自サイトの qwikWeb 上に
展開することで、これまでの記事の移行ができることは確認しました。
ただ、以下の問題が有ります。

 (1)アーカイブ内のファイルのタイムスタンプがアーカイブ取得時のもの
    になっていて、「Recent List」などの表示が無意味になってしまう
 (2)アーカイブに添付ファイルが含まれていない

(1)に関して、アーカイブを作るときにタイムスタンプの情報を
残すようにできないでしょうか?

(2)に関しては、ファイルサイズの面などからアーカイブに含めるのは
難しいことと思います。これを解決する何か良い手段はないでしょうか?

Tsuyoshi FUKUI

Mar 9, 2007 From: 2007@e...

江渡です.

編集ページからサイトアーカイブを取得し、独自サイトの qwikWeb 上に 展開することで、これまでの記事の移行ができることは確認しました。 ただ、以下の問題が有ります。

(1)アーカイブ内のファイルのタイムスタンプがアーカイブ取得時のもの になっていて、「Recent List」などの表示が無意味になってしまう (2)アーカイブに添付ファイルが含まれていない

(1)に関して、アーカイブを作るときにタイムスタンプの情報を 残すようにできないでしょうか?

(2)に関しては、ファイルサイズの面などからアーカイブに含めるのは 難しいことと思います。これを解決する何か良い手段はないでしょうか?

qwik.jpからの移行作業の件ですが,もし希望であれば,該当するdirectoryそ
のものをtar.gzなどでお渡しすることは可能です.手動でやることになります.

また,上記1,2などの動作を行うパッチを作成していただければ,こちらで適
用することは可能です.

よろしくおねがいいたします.

Mar 9, 2007 From: yasuo@e...

えとーです。

On Thu, 08 Mar 2007 12:26:27 +0900 (JST)
Tsuyoshi FUKUI <fukui556@o...> wrote:

福居です。

これまで qwik.jp で運用していたメーリングリストを 自分のサイトで立ち上げた qwikWeb に移行したいと考えています。

編集ページからサイトアーカイブを取得し、独自サイトの qwikWeb 上に 展開することで、これまでの記事の移行ができることは確認しました。 ただ、以下の問題が有ります。

(1)アーカイブ内のファイルのタイムスタンプがアーカイブ取得時のもの になっていて、「Recent List」などの表示が無意味になってしまう (2)アーカイブに添付ファイルが含まれていない

(1)に関して、アーカイブを作るときにタイムスタンプの情報を 残すようにできないでしょうか?

(1)のほうは、調べていますが。ご勘弁を他の方がさくっと解決してくれるかも、、、

(2)に関しては、ファイルサイズの面などからアーカイブに含めるのは 難しいことと思います。これを解決する何か良い手段はないでしょうか?

ファイルサイズもですが、画像系のファイルも添付ファイルと同様の
扱いになっているのでそれの対処もやる必要があるかもしれません。

画像系のファイルで私が気にしている具体的なものとしては
codeプラグインの番号の画像。
graphvizプラグインの画像。
の二点です。

江渡さん graphvizプラグインの再度の取り込みはどうなっていましたっけ?

Mar 10, 2007 From: fukui556@o...

福居です。

Kouichirou Eto <2007@e...>'s message

at Fri, 09 Mar 2007 00:13:12 +0900

(1)に関して、アーカイブを作るときにタイムスタンプの情報を 残すようにできないでしょうか?

(2)に関しては、ファイルサイズの面などからアーカイブに含めるのは 難しいことと思います。これを解決する何か良い手段はないでしょうか?

qwik.jpからの移行作業の件ですが,もし希望であれば,該当するdirectoryそ のものをtar.gzなどでお渡しすることは可能です.手動でやることになります.

また,上記1,2などの動作を行うパッチを作成していただければ,こちらで適 用することは可能です.

(1)を実現するパッチを作りました。(添付ファイル: act-archive.patch)

ただ、act-archive で(2)を解決する方法は僕の手に余ったので tar.gz を
お願いしようかと思ったのですが、せっかくの機会なので、ディレクトリを
まるごと tar.gz で固めるプラグインを作ってみました。(添付ファイル: act-archive-tgz.rb)
tar コマンドに依存しているところがいまいちですが、良ければ適用をご検討ください。
また、qwickWeb のプラグインは初めてなので、おかしな所があればご指摘ください。

Tsuyoshi FUKUI

module Qwik

 TAR_COMMAND = '/bin/tar'
 class Action
   D_ExtArchiveTgz = {
     :dt => 'Site archive',
     :dd => 'You can obtain a tgz(tar.gz) archive ot the site content.',
     :dc => "* Example
nosuch plugin | tgz

You can get a tgz(tar.gz) archive of all data of this Wiki site.
"

   }
   D_ExtArchiveTgz_ja = {
     :dt => 'サイト・アーカイブ(添付ファイル含む)',
     :dd => 'サイト・アーカイブを取得できます。',
     :dc => '* 使い方
nosuch plugin | tgz

このリンクから、サイトの内容まるごと全部(添付ファイル含む)を一つのアーカイブにして
ダウンロードできます。
'{{br}}

   }
   def plg_tgz
     return page_attribute('tgz', _('site archive'), @site.sitename)
   end
   def ext_tgz
     c_require_member
     c_require_base_is_sitename
     tgz_file = SiteArchiveTgz.generate(@config, @site)
     return c_simple_send(tgz_file, 'application/gzip')
   end
 end
 class SiteArchiveTgz
   def self.generate(config, site)
     sitename = site.sitename
     site_cache_path = site.cache_path
     site_cache_path.check_directory
     tgz_file =  site_cache_path + "#{sitename}.tgz"
     system("#{Qwik::TAR_COMMAND} -zc -C #{config.sites_dir}  -f #{tgz_file} --exclude .cache #{sitename}")
     return tgz_file
   end
 end

end

if $0 __FILE__

 $LOAD_PATH << '..' unless $LOAD_PATH.include? '..'
 require 'qwik/test-common'
 require 'qwik/util-pathname'
 $test = true

end

if defined?($test) && $test

 class TestActArchive < Test::Unit::TestCase
   include TestSession
   def test_plg_tgz
     ok_wi [:p, [:a, {:href=>'test.tgz'}, 'test.tgz']], '[[test.tgz]]'
     ok_wi [:span, {:class=>'attribute'},
      [:a, {:href=>'test.tgz'}, 'site archive']], '{{tgz}}'
   end
 end
 class TestActArchive < Test::Unit::TestCase
   include TestSession
   def test_act_tgz
     t_add_user
     page = @site['_SiteConfig']
     page.store ':theme:qwikborder'
     page = @site.create_new
     page.store '* あ'
     page = @site.create_new
     page.store '* A Presentation Page
Presentation mode

Header 2

'{{br}}

     page = @site.create('PresenTest')
     page.store '* A presentation test page'
     dir = 'test/'.path
     files = Qwik::PageFiles.new(dir.to_s, '1')
     files.fput('t.txt', 't')
     res = session '/test/test.tgz'
     ok_eq 'application/gzip', res['Content-Type']
     str = res.body
     '/tmp/testtemp.tgz'.path.open('wb') {|f| f.print str }
     system("#{Qwik::TAR_COMMAND} -zxf /tmp/testtemp.tgz -C /tmp")
     list = []
     dir = '/tmp/test'
     Dir.foreach(dir) do |e|
       next if [".",".."].include? e
       if (FileTest::directory?(dir + '/' + e)) then
         Dir.foreach(dir + '/' + e) do |ee|
           next if [".",".."].include? ee
           list << dir + '/' + e + '/' + ee
         end
         next
       end
       list << dir + '/' + e
     end
     files = %w(

/tmp/test/1.txt
/tmp/test/1.files/t.txt
/tmp/test/2.txt
/tmp/test/PresenTest.txt
/tmp/test/_SiteConfig.txt
/tmp/test/_SiteMember.txt
)

     not_included_files = %w(

test/1-presen.html
)

     files.each {|file|
eq true, list.include?(file)
     }
     not_included_files.each {|file|
eq false, list.include?(file)
     }
     files.delete('t.txt')
     '/tmp/testtemp.tgz'.path.unlink
     delete_dir('/tmp/test')
   end
   def delete_dir(dir)
     Dir.foreach(dir) do |e|
       next if [".",".."].include? e
       name = File.join(dir, e)
       if FileTest::directory?(name)
         delete_dir(name)
       else
         File.delete(name)
       end
     end
     Dir.delete(dir)
   end
 end
 class TestSiteArchive < Test::Unit::TestCase
   include TestSession
   def test_tgz
     res = session
     page = @site.create_new
     page.store('* あ')
     tgz = Qwik::SiteArchiveTgz.generate(@config, @site)
     assert_match(/test.tgz\Z/, tgz.to_s)
   end
 end

end

act-archive.rb.bak Fri Mar 9 18:54:14 2007

**********

82,88 ****

       base = "#{site.sitename}/#{page.key}"
 
       # Add original txt file.

add_entry(zos, "#{base}.txt", page.load)

 
       # Generate a html file.
       html_path = site_cache_path+"#{page.key}.html"
       base = "#{site.sitename}/#{page.key}"
 
       # Add original txt file.

add_entry(zos, "#{base}.txt", page.load, page.mtime)

 
       # Generate a html file.
       html_path = site_cache_path+"#{page.key}.html"
**********

103,110 ****

       end
     end
 

def self.add_entry(zos, filename, content)

e = Zip::ZipEntry.new(, filename)

       zos.put_next_entry(e)
       zos.write(content)
     end
       end
     end
 

def self.add_entry(zos, filename, content, mtime = Time.new)

e = Zip::ZipEntry.new(, filename, , , 0,0, Zip::ZipEntry::DEFLATED, 0, mtime)

       zos.put_next_entry(e)
       zos.write(content)
     end

Mar 13, 2007 From: yasuo@e...

えとーです。
調べました。

On Fri, 9 Mar 2007 00:15:46 +0900
Eto Yasuo <yasuo@e...> wrote:

えとーです。

On Thu, 08 Mar 2007 12:26:27 +0900 (JST) Tsuyoshi FUKUI <fukui556@o...> wrote:

福居です。

これまで qwik.jp で運用していたメーリングリストを 自分のサイトで立ち上げた qwikWeb に移行したいと考えています。

編集ページからサイトアーカイブを取得し、独自サイトの qwikWeb 上に 展開することで、これまでの記事の移行ができることは確認しました。 ただ、以下の問題が有ります。

(1)アーカイブ内のファイルのタイムスタンプがアーカイブ取得時のもの になっていて、「Recent List」などの表示が無意味になってしまう (2)アーカイブに添付ファイルが含まれていない

(1)に関して、アーカイブを作るときにタイムスタンプの情報を 残すようにできないでしょうか?

qwikの問題ではなくqwikから使っているrubyzipライブラリの問題でした、
ちょっと調べてから rubyのIRCで聞いてみたとろ、Holonさんという人にも
確認してもらいsf.netにパッチまでおくってもらっちゃいましたので、
rubyzip側での取り込みとrubyzipのリリースを待つことになります。

rubyzipへのbug報告とパッチ(from Holonさん)
http://sourceforge.net/tracker/index.php?func=detail&aid=1543984&group_id=43107&atid=435170

Mar 15, 2007 From: fukui556@o...

福居です。

Eto Yasuo <yasuo@e...>'s message

at Tue, 13 Mar 2007 23:20:06 +0900

(1)アーカイブ内のファイルのタイムスタンプがアーカイブ取得時のもの になっていて、「Recent List」などの表示が無意味になってしまう (2)アーカイブに添付ファイルが含まれていない

(1)に関して、アーカイブを作るときにタイムスタンプの情報を 残すようにできないでしょうか?

qwikの問題ではなくqwikから使っているrubyzipライブラリの問題でした、 ちょっと調べてから rubyのIRCで聞いてみたとろ、Holonさんという人にも 確認してもらいsf.netにパッチまでおくってもらっちゃいましたので、 rubyzip側での取り込みとrubyzipのリリースを待つことになります。

rubyzipへのbug報告とパッチ(from Holonさん) http://sourceforge.net/tracker/index.php?func=detail&aid=1543984&group_id=43107&atid=435170

このバグは put_next_entry() にファイル名を文字列で渡した場合の
ものではないでしょうか?
qwik では文字列ではなく ZipEntry を生成して
put_next_entry() に渡している(act-archive.rb の add_entry())ので、
ZipEntry にタイムスタンプの情報を持たせておけば問題無いはずです。

以下、テストプログラムです。
(Debian 3.1, ruby 1.8.2, libzip-ruby1.8(0.5.6-1))

----------------------------------------------------------------------
#!/usr/bin/ruby

require 'zip/zip'

zip_filename = "/tmp/rubyzip_test.zip"
mt = Time.now - (60*60*24)

Zip::ZipOutputStream.open(zip_filename) {|zos|
  e = Zip::ZipEntry.new('', 'test.txt', '', '', 0, 0, Zip::ZipEntry::DEFLATED, 0, mt)
  zos.put_next_entry(e)
  zos.write("testtest")
}
----------------------------------------------------------------------

[実行結果]{{br}}

----------------------------------------------------------------------
$ ruby test.rb
$ ls -l /tmp/rubyzip_test.zip
-rw-r--r--  1 tfukui tfukui 122 Mar 15 12:00 rubyzip_test.zip

$ unzip -l /tmp/rubyzip_test.zip
Archive:  rubyzip_test.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        8  03-14-07 12:00   test.txt  (←ちゃんと1日前の日付になっている)
 --------                   -------
        8                   1 file
----------------------------------------------------------------------

というわけで、手元の qwikWeb では [qwikweb:77] のパッチで
タイムスタンプ付きの Zip ファイルを得られるようになっています。

Tsuyoshi Fukui

Mar 15, 2007 From: fukui556@o...

福居です。

Tsuyoshi FUKUI <fukui556@o...>'s message

at Sat, 10 Mar 2007 04:51:30 +0900 (JST)

(2)に関しては、ファイルサイズの面などからアーカイブに含めるのは 難しいことと思います。これを解決する何か良い手段はないでしょうか?

ただ、act-archive で(2)を解決する方法は僕の手に余ったので tar.gz を お願いしようかと思ったのですが、せっかくの機会なので、ディレクトリを まるごと tar.gz で固めるプラグインを作ってみました。(添付ファイル: act-archive-tgz.rb) tar コマンドに依存しているところがいまいちですが、良ければ適用をご検討ください。

このプラグインについてコメントいただけないでしょうか?
qwik.jp に適用できない、あるいは適用するかどうかの検討に時間がかかる
ということであれば、

[qwikweb:73]{{br}}

qwik.jpからの移行作業の件ですが,もし希望であれば,該当するdirectoryそ のものをtar.gzなどでお渡しすることは可能です.手動でやることになります.

をお願いしたいと考えています。
(できれば3月中には移行したいと考えています)

Tsuyoshi Fukui

Mar 15, 2007 From: 2007@e...

江渡です.対応する時間がとれていなくてすいません.

このプラグインについてコメントいただけないでしょうか? qwik.jp に適用できない、あるいは適用するかどうかの検討に時間がかかる ということであれば、

すいません,検討に時間がかかりますので,

qwik.jpからの移行作業の件ですが,もし希望であれば,該当するdirectoryそ のものをtar.gzなどでお渡しすることは可能です.手動でやることになります.

をお願いしたいと考えています。 (できれば3月中には移行したいと考えています)

こちらを先に行います.
私宛に,該当するグループの名前と,送付先を教えてください.

Mar 15, 2007 From: yasuo@e...

えとーです。

On Thu, 15 Mar 2007 12:09:39 +0900 (JST)
Tsuyoshi FUKUI <fukui556@o...> wrote:

福居です。

Eto Yasuo <yasuo@e...>'s message at Tue, 13 Mar 2007 23:20:06 +0900

(1)アーカイブ内のファイルのタイムスタンプがアーカイブ取得時のもの になっていて、「Recent List」などの表示が無意味になってしまう (2)アーカイブに添付ファイルが含まれていない

(1)に関して、アーカイブを作るときにタイムスタンプの情報を 残すようにできないでしょうか?

qwikの問題ではなくqwikから使っているrubyzipライブラリの問題でした、 ちょっと調べてから rubyのIRCで聞いてみたとろ、Holonさんという人にも 確認してもらいsf.netにパッチまでおくってもらっちゃいましたので、 rubyzip側での取り込みとrubyzipのリリースを待つことになります。

rubyzipへのbug報告とパッチ(from Holonさん) http://sourceforge.net/tracker/index.php?func=detail&aid=1543984&group_id=43107&atid=435170

このバグは put_next_entry() にファイル名を文字列で渡した場合の ものではないでしょうか? qwik では文字列ではなく ZipEntry を生成して put_next_entry() に渡している(act-archive.rb の add_entry())ので、 ZipEntry にタイムスタンプの情報を持たせておけば問題無いはずです。

以下、テストプログラムです。 (Debian 3.1, ruby 1.8.2, libzip-ruby1.8(0.5.6-1))


require 'zip/zip'

zip_filename = "/tmp/rubyzip_test.zip" mt = Time.now - (60*60*24)

Zip::ZipOutputStream.open(zip_filename) {|zos| e = Zip::ZipEntry.new(, 'test.txt', , , 0, 0, Zip::ZipEntry::DEFLATED, 0, mt) zos.put_next_entry(e) zos.write("testtest") }


[実行結果]


$ ruby test.rb $ ls -l /tmp/rubyzip_test.zip

  • rw-r--r-- 1 tfukui tfukui 122 Mar 15 12:00 rubyzip_test.zip

$ unzip -l /tmp/rubyzip_test.zip Archive: rubyzip_test.zip Length Date Time Name

      • ----- ---- ---- ----

8 03-14-07 12:00 test.txt (←ちゃんと1日前の日付になっている)

      • ----- -------

8 1 file


というわけで、手元の qwikWeb では [qwikweb:77] のパッチで タイムスタンプ付きの Zip ファイルを得られるようになっています。

あぁ、、、そうでしたか。
どっかで観点のポイントがずれてあさっての方向に向ったようです。

大変失礼いたしました。