雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|

2013-08-15

tDiary-4.0.0に移行

だいぶ手を入れていたせいでなかなか踏ん切りがつかなかったtDiaryの環境を一念発起して最新の4.0.0に上げる事に。ruby18+2.2.3(EUC)からruby19+4.0.0(UTF-8)への移行ということで、なかなか厳しいかなと思っていたのですが、結果的には1日で終わりました。tDiary開発陣の継続性への配慮には感服するばかりです。とはいえ多少手こずったのでメモを残しておきます。

最初に手順をまとめておくと、

  1. まず、ruby18+3.2.2に上げてUTF-8化する
  2. 3.2.2をruby19で動かす
  3. 4.0.0にアップデートする

という順にやるのが確実なようです。

まず試したのは4.0.0のインストール。最初gem版を入れてみたのですが、プラグインやテーマ、BlogKitなどの入れ方がよく分からなかったので、すぐに挫折してダウンロード版を使う事に。ダウンロードページからフルセットとBlogKitをダウンロードして展開、コピー。この辺の手順は2.2.3の頃とほとんど変わりません。

データをコピーしてアクセスしてみると、以下のエラー

There was a Errno::ENOENT while loading tdiary.gemspec: 
No such file or directory - git ls-files from
/home/socodanet/local/tdiary/core/tdiary.gemspec:16:in ``'
(Bundler::GemspecError)

検索するとgitが必要そうな記述を発見。ここはsandbox上で動かしていて開発用ツールを入れるつもりは無いので、4.0.1あたりで直るだろうということで4.0.0化もあっさり挫折。結果論ですがこの判断は正しかったです。

で、3.2.2を入れようとしたのですが、tDiaryのダウンロードページにリンクが無い。ここは慌てず騒がず、4.0.0のパスから類推してフルセットBlogKitを無事ダウンロード。展開してインストール。

日記のデータをコピーして、テスト用のパスで表示すると文字化け。キャッシュを消してみても変わらず。原因が分からずいろいろと情報を探すと、3.0.0のリリースノートに「tDiary 3.0とruby 1.9.2を同時にアップデートしない」とちゃんと書いてありました。今頃アップデートしようとしてるから自業自得です。ということで、ruby18を使うようにindex.cgiのshebangを書き換え、

#!/usr/local/bin/ruby18
require '/usr/local/tdiary-3.2.2/index'

キャッシュをクリアしてからアクセスするとUTF-8に正しく変換されて文字化けは解消しました。すばらしい。

ただ、テーマがうまく反映されず、調べているうちに、複数のtDiaryを運用している事を思い出し、[[同一サーバで複数のtDiaryを運営する方法|http://www.tdiary.org/20021205.html]]を参考にpluginsの下にうちの環境に合わせたchange_url.rbを設置して解決。
# change_url.rb
def theme_url
   '/tdiary/theme'
end
 
def js_url
   '/tdiary/js'
end

思い出したついでに他のページでも以下を繰り返して3.2.2にアップデート。

  1. データをバックアップ
  2. index.cgi, update.cgiのshebangを、ruby18を使うように修正
  3. キャッシュを削除
  4. ページにアクセスしてキャッシュを再生成
  5. ruby19を使うようにshebangを再修正
  6. この時点ではキャッシュに"Powered by Ruby 1.8.x"表記が残るのでcache/latest.rbを削除

これでほぼ作業完了ですが、hikidoc.rbとファイルアップロードのプラグインは改造したものを使っているので置き換え。こちらは幸いにもファイルの漢字コードをEUC-JPからUTF-8に変換するだけで問題無く動きました。

当初予定していた4.0.0化は出来なかったけどUTF-8化とruby19対応は出来たので良いかと思い一区切りつけたものの、ちょっともやもやが残っていたのでTwitterで愚痴ったら、30分もしないうちに@machuさんからお返事がきて、インストールしたtDiaryのトップディレクトリにあるGemfileの5行目の"gemspec"という行を削除すれば動くとの助言をいただきました。

source 'https://rubygems.org'

if File.exist?(File.expand_path('../tdiary.gemspec', __FILE__))
        # directly installed (e.g. git clone, archive file)
        # gemspec      <-この行をコメントアウト
else
 :

さっそく試してみると、なぜか手元の環境ではfastimageが見つからないとのエラー

[clear] ダウンロードしてきたtar ballを展開した状態では.bundle/ruby/1.9.1/gems/fastimage-1.5.0に入っていて、このパスが見つけられない模様。rubyは1.9.3p448なのでバージョン番号と思われる"1.9.1"を"1.9.3"に変えてみても駄目。試しに"1.9"にしたところ、こんどはGemfile.lockへの書き込みエラーになったので、Gemfile.lockのownerをwwwにしてapacheに書き込み権限を与えたら無事動きました。

@machuさんに報告すると、先方の環境ではruby 1.9.3でもパスは1.9.1のままで動くとのことなので、rubyやgemのコンパイルやインストール時のオプションが原因かもしれないと思いちょっと調べてみましたが、よく分かりませんでした。rubyもgemもbundlerもFreeBSDのportsを使ってインストールしているので、そんなに変な環境ではないはずなんですが…{{fn '1.8と1.9を共存させるためにちょっといじってはいます'}}

以下、雑感です。

  • 漢字コードの変換や1.9への移行のスムーズさはすばらしい
  • bundlerのパスの謎は環境依存の懸念が残って、かなり気持ち悪い
  • 現在の4.0.0の状態でダウンロードページから3.2.2のリンクが消えてしまっているのはちょっと疑問
  • あえて書いてませんが、"bundle install"で解決する事は確認済みです。いろいろやっている間に、tDiaryの「レンタルサーバーユーザにやさしい」という謳い文句が形骸化してきているように思えてちょっと寂しくなったので。

[green]


本日のツッコミ(全2件) [ツッコミを入れる]

- まちゅ [レンタルサーバでもこれまで通り簡単に動かせるようにしつつ、新しい環境(RackやBundler)にも対応していこうと..]

- hs [まちゅさん せっかくコメントいただいたのにSPAMフィルタの調子が悪かったようで非表示になっていました。 おかげ..]