dreamedge.net

sitemapプラグインを使う

2008-08-19T16:07:00+0000

sitemap.xmlをはかせるためのプラグイン.インストール方法は配布元で説明されているので省略.

これが,mephistoオフィシャルのダウンロードにあるmasterブランチのソースだと動かない.Mephisto::Pluginはclassじゃないから継承できませんっていうエラーが出るのだが,どうも2008-02-20あたりのコミットで,Mephisto::Pluginがclassからmoduleに変更されているのが原因っぽい.

ので,このプラグインを使いたい場合は,その変更がされていない(2008-08-19現在)rel-0.8ブランチのソースを取ってくること.

しかしデフォルトのダウンロード先が開発版になっているのはどうかと思う.

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

記事登録時に”Iconv::InvalidEncoding”が出る

2008-08-19T15:39:00+0000

さくらのレンタルサーバの環境でmephisto0.8を動かすと,記事の登録時にエラーが出て実行できなくなった.ログを見ると,”Iconv::InvalidEncoding (invalid encoding (“ascii//translit//IGNORE”, “utf-8”))”が出ていて,どうやらエンコードの変換ができてないもよう.

同等の変換をiconvに直接入れてみても,下記のようなエラーが出るので,どうやらさくらの環境(FreeBSD)だと対応していないエンコーディングなのが問題らしい.(同様のコマンドをDebian etch環境で動かすと普通に通る)

$ echo 'test' | iconv -t ascii//translit//IGNORE -f utf-8
iconv: conversion to ascii//translit//IGNORE unsupported

なので,問題を起こしているpermalink_fuプラグインを書き換えて対処することに.本来的にはlibiconv辺りを入れ替えるべきなんだけど,それが出来ないのがホスティングサーバのつらいところです.

具体的にはGoogle Groupsの”Mephisto blog”グループの記事にあるように,エンコーディング名にIGNOREを付けているところを変更すればよい.

--- vendor/plugins/permalink_fu/lib/permalink_fu.rb     2008-08-15 10:22:38.000000000 +0900
+++ vendor/plugins/permalink_fu/lib/permalink_fu.rb      2008-08-20 01:02:21.000000000 +0900
@@ -6,7 +6,7 @@ module PermalinkFu
     attr_accessor :translation_from

     def escape(str)
-      s = Iconv.iconv(translation_to + '//IGNORE', translation_from, str).to_s
+      s = Iconv.iconv(translation_to, translation_from, str).to_s
       s.gsub!(/\W+/, ' ') # all non-word chars to spaces
       s.strip!            # ohh la la
       s.downcase!         #

しかしこの”ascii/translit”エンコードって何なんだろう.phpでよくつかわれているらしいが,URLエンコードされた文字列を扱うためのものなのか???

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

mephisto 0.8でtagに大文字を使う方法

2008-08-19T14:36:00+0000

mephisto 0.8からはtagの仕様が変わったのか,tag内に大文字を含むことができなくなった.

これが前記事のような手法で0.7.3から移行している人間にとっては大問題.0.7.3時代に作った”Linux”とか”Emacs”とかのタグが,タグ一覧とかで引けなくなるという致命的な問題を発生させる.

問題を引き起こしてるのはapp/models/tag.rbのcleanup_tagsメソッド.このなかでタグ内容をdowncaseしているのをコメントアウトすればOK.

--- app/models/tag.rb.bak       Tue Aug 19 23:41:45 2008
+++ app/models/tag.rb   Tue Aug 19 21:50:18 2008
@@ -61,7 +61,7 @@ class Tag < ActiveRecord::Base
         tags.tap do |t|
           t.collect! do |tag|
             unless tag.blank?
-              tag.downcase!
+              #tag.downcase!
               tag.gsub!(/:/, '')
               tag.strip!
               tag
このエントリーをはてなブックマークに追加
Bookmark this on Delicious

mephistoでpaginationを使う

2008-08-19T14:31:00+0000

普通のブログサイトでは,古い記事が参照できるように「前の5日分」とかいうリンクが自動的に出るけど,設計思想の問題かmephistoのデフォルトではそういう機能がなかった.それではあまりに使いづらいのでいろいろ調べていた所,Paged Article Listsプラグインを発見.以下,そのインストール手順.

1. WillPaginate Liquidizedプラグインをインストール

$ script/plugin install http://svn.artweb-design.de/stuff/rails/will_paginate_liquidized/tags/will_paginate_r413/

解説ページには,別個にwill paginateプラグインをインストールしろとか,will paginateには古いのとchristmas 07バージョンがあって,それぞれに対応したやつをいれろとかぐちゃぐちゃ書いてある.(will paginate本家に行くとgemで入れろと書いてあってさらに混乱する)

が,Mephisto 0.8にはここで言うところの古いwill_paginateプラグインが入っているので,r413バージョンをいれれば万事OK.

2. Paged Article Listsプラグインをインストール

$ script/plugin install http://svn.artweb-design.de/stuff/mephisto/mephisto_paged_article_list

3. デザインテンプレートに設定する

基本的にarticlesが入るところならどこでもいいのだが,自分は_shared.liquidの末尾に,

{{ articles | link_to_prev_page: path_info, '&laquo; previous posts' }}
 |
{{ articles | link_to_next_page: path_info, 'next posts &raquo;' }}

と設定している.

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

mephisto 0.7.3から0.8.0への更新

2008-08-19T14:24:00+0000

mephisto0.73から0.8.0への更新作業を行った時の記録.オフィシャルにはアップグレードガイドみたいなのはないので,ここのページとかを参考に行った.

0. mephistoの最新版を取ってくる

officialにあるmasterブランチは余り良くない.
(Pluginシステムとかが変わっていて,対応してないのが多い)
ので,rel-0.8から取ってくるのが良い.

今回は2008-07-01にcommitされたtechnoweenie-mephisto-45ffeb7a56d59b8abe0bd78b53cec861423c9654.tar.gzを利用.

1. backupを取る

$ tar cvzf mephisto_backup.tar.gz my_mephisto_dir/

sqliteを使ってない場合は,dbのバックアップも別途取ること.

2. patchをつくる

いままで動かしていた0.7.3のソースを使って,アップデートパッチを作る

$ wget http://s3.amazonaws.com/mephisto-blog/mephisto-0.7.3.tar.gz
$ tar xvzf mephisto-0.7.3.tar.gz
$ tar xvzf technoweenie-mephisto-45ffeb7a56d59b8abe0bd78b53cec861423c9654.tar.gz
$ diff -Nurdp mephisto-0.7.3 technoweenie-mephisto-45ffeb7a56d59b8abe0bd78b53cec861423c9654 \
  > ~/mephisto-update.patch

3. patchを当てる

$ cd my_mephisto_dir/
$ patch -p1 < ~/mephisto-update.patch &> ~/patch.log

4. patchを当て損なったポイントを確認

environment.rb等を中心に,当て損なっている所も多いので,その一覧を取得.

$ find ./* -name *.rej
$ grep rej ~/patch.log

今回はapp/controllers/mephisto_controller.rb conf/environment.rb public/.htaccess public/install.htmlが引っかかった.

後ろ2つは問題ないので無視.mephisto_controller.rbは最新版で置き換え.environment.rbは置き換えた後に,もう一回設定をし直す.

5. gem packageのアップデート

railsを2.0.2にアップデートする.tzinfoもアップデートorインストールすること.

$ gem install rails -v=2.0.2
$ gem install tzinfo

0.7.3時代の遺産としてvendor/tzinfo-0.3.2/とかが残っている場合は消去しておくこと.そうしないとTZInfo周りのエラーが出てadmin画面を開けなくなります.

6. Databaseのアップデート

$ cd ~/myblog
$ RAILS_ENV=production rake db:migrate

7. 動作確認

$ script/server -e production

これで無事動けばOK.実際には結構いろいろとトラブル(iconvでascii//translit//ignoreが変換できないとか)があったけど,環境依存な部分もあるのでそこら辺は別記事で.

このエントリーをはてなブックマークに追加
Bookmark this on Delicious