the lost utf8 encoding

0

更新紀錄

  1. 2006-1001 還是發生亂碼現象,這次進去看才發現原來之前的設定 /usr/bin/env ruby 並不一定會抓 /home/foo/bin/ruby 而是根據 fcgi 的設定,往往是 /usr/bin/ruby-1.8。之前如減少 500 建議又加上 frao_handler 試圖 reload 被 DH 定時砍的 fcgi ,也許在 reload 時出現問題 ? 刪除後觀察看看。

源起

之前一直遭遇亂碼問題 typo 4 post install ,終於到了需要攤牌的時候,經過一陣子觀察,發現混用環境會用到同帳號下面其他虛擬主機的 MySQL 連線,而剛好這個 foo 虛擬主機只是測試用,並沒有正常設定資料庫需要的 encoding 連結參數,這下子就慘了。

$ ps aux | grep xxx
xxx 20120  0.2  0.6 29140 26564 ?       S    19:07   0:02 ruby dispatch.fcgi
xxx 26233  0.4  0.9 46028 36960 ?       S    19:08   0:04 ruby dispatch.fcgi
xxx 11270  0.2  0.6 29140 26568 ?       S    19:11   0:02 ruby dispatch.fcgi
xxx 14002  0.0  0.0  6488 1880 ?        S    19:19   0:00 sshd: linthink@pts/6
xxx  6930  0.0  0.0  4788 1684 pts/6    Ss   19:19   0:00 -bash
xxx 13610  0.8  0.6 29140 26556 ?       S    19:20   0:02 ruby dispatch.fcgi
xxx  9397  0.7  0.5 24684 22136 ?       S    19:22   0:01 /usr/bin/ruby1.8 dispatch.fcgi
xxx  4355  0.0  0.0  2484  860 pts/6    R+   19:24   0:00 ps aux
xxx 24377  0.0  0.0  4788 1688 pts/6    R+   19:24   0:00 -bash

一發生亂碼現象,馬上連進去看看現場,發現 ruby1.8 這個行程應該不存在,這是系統提供的 ruby ,但是我的 blog 站 typo 確是用私有 ruby,這代表有人在使用 foo 虛擬主機下的服務。

$ ls -al /proc/9397/
-r--r--r--    1 xxx sasl 0 2006-09-21 19:25 cpu
lrwxrwxrwx    1 xxx sasl 0 2006-09-21 19:25 cwd -> /kkk/foo.extremepattern.com/public
-r--------    1 xxx sasl 0 2006-09-21 19:25 environ
lrwxrwxrwx    1 xxx sasl 0 2006-09-21 19:25 exe -> /usr/bin/ruby1.8

進去 proc 看看,果然是虛擬主機 foo,先試著關掉 dispatch.fcgi 看看。

$ cd foo.extremepattern.com/public
$ mv .htaccess htaccess.bak

kill 這個不速之客後,reload 部落格網頁,還是喚起這個屬於 foo 的連線,猜測應該是某種連接池關係,所以還是一堆亂碼。只好把其他 ruby 行程全砍,然後再進 typo 管理將快取清過,總算恢復編碼正常。

一小時代價

看了一下,發現之前不注意,有一篇文章被上面的程序,導致亂碼污了資料庫,先到 phpmyadmin 查到這筆紀錄 更改時間是 2006-09-05 18:35:21,再去找備份 sql 截取出這段紀錄,重新貼上。同時這代表後來逐日備份全部 遭到污染。

結論

  1. 同一個帳號環境要一樣
  2. 備份很重要,舊的不要刪掉
  3. 小問題還是要先解決,亂碼污染資料庫到幾百筆就難清了
  4. rails 共用環境是新的需求,遠不如 PHP 等共用環境穩定。

Upgrading Typo 4.0.3

0

升級前注意事項

升級前務必備份,而且是 MySQL 備份。typo installer 升級採先備份 yml,洗光,改結構,注入舊備份 yml。

問題是這個流程中,備份採用 YAML 格式,這個格式非常不適合處理多行資料,特別是中間有一大堆雙引號與奇怪程式碼的內容,往往會出現資料回復 YAML.load_file 時卡住現象,如果不想幾千筆資料用手慢慢清的人,請務必先用 mysqldump 做些預防。

開始

第一次升級,之前參照 這裡 是用專屬的 gem 做法,所以一開始就打算用懶人 installer 升級法。

$ gem install typo
Bulk updating Gem source index for: http://gems.rubyforge.org
Install required dependency rails-app-installer? [Yn]  y
Successfully installed typo-4.0.3
Successfully installed rails-app-installer-0.2.0
Installing ri documentation for rails-app-installer-0.2.0...
Installing RDoc documentation for rails-app-installer-0.2.0...

$ gem list | grep typo
typo (4.0.3, 4.0.2)

$ gem uninstall typo

Select RubyGem to uninstall:
 1. typo-4.0.2
 2. typo-4.0.3
 3. All versions
> 1
Successfully uninstalled typo version 4.0.2

付諸流水

接下來就是一連串問題的開始。因為覺得用 Rail Application Installer 應該很方便,可以幫忙更新檔案與資料庫結構,結果是東西不用不明白。

$ typo install blog.extremepattern.com
 Installing typo 4.0.3
.......
 Checking database
 Database exists, preparing for upgrade
 Migrating Typo's database to newest release
........

 Running tests.  This may take a minute or two
 ***** Tests failed *****
 ** Please run 'rake test' by hand in your install directory.

以為只是測試失敗,沒管他,直接上網頁去看,居然跳出 signup 畫面,這通常是第一次登入才會出現,心中有不好的預感,很擔心資料庫全部被洗光,而我因為只有十幾筆資料,還沒有做 MySQL 備份。

結果是只剩下兩筆進去,而且系統也怪怪的,應該是吃了不乾淨的東西。

柳暗花明

心想還好這個 installer 有個新的 備分機制 ,安裝前會存放資料到 YAML 格式,於是試試看。

$ rails-restore db/backup/backup-20060820-2116.yml
Restoring data
 Restoring table articles_categories (17)
 Restoring table page_caches (0)
 Restoring table pings (0)
 Restoring table tags (0)
 Restoring table blacklist_patterns (0)
 Restoring table redirects (0)
 Restoring table resources (6)
 Restoring table sidebars (4)
 Restoring table categories (6)
 Restoring table contents (2)
 Restoring table notifications (0)
 Restoring table users (1)

欲哭無淚

可以復原,但是資料卻無法完全餵進去,只有兩筆內容可以。想說進管理頁面看看,會要求資料庫結構要升級,一按下去,卻停掉。

結果只剩下兩筆資料,這才發現轉成 YAML 有許多問題,特別是多行內容加上 text filter 語法的時候。

大海撈針

於是想辦法試看看要刪除哪裡才可以救回資料。

require "yaml" 
db = YAML:load_file "backup-20060820-2116.yml" 

發現在 windows 平台會秀出第幾行吃不去,完全吃不進去一點資料,但是 linux 平台卻吃進去兩筆停住。反覆修改後才救出這些資料,而且兩種平台改的地方還不一樣,不過主要是多行的雙引號問題導致,偏偏 textile 用雙引號當超連結使用,所以有些地方衝到。

大功告成

根據上面說明需要回到之前版本的資料庫結構。

$ rake migrate VERSION=49
$ rails-restore db/backup/backup-modify-20060820.yml

Restoring data
 Restoring table articles_categories (17)
 Restoring table page_caches (0)
 Restoring table pings (0)
 Restoring table tags (0)
 Restoring table blacklist_patterns (0)
 Restoring table redirects (0)
 Restoring table resources (6)
 Restoring table sidebars (4)
 Restoring table categories (6)
 Restoring table contents (13)
 Restoring table notifications (0)
 Restoring table users (1)
 Restoring table articles_tags (0)
 Restoring table text_filters (5)
 Restoring table triggers (0)
 Restoring table blogs (1)

$ rake migrate

美中不足

還是有問題,文章列表都是空的,進去看發現 contents 表的 type 欄位都是 NULL,但是 YAML 中卻是有 type: Article 這欄位,很奇怪。於是只好自己來

MySQL > update contents set type='Article'

來亂的

最後雖然列表出來,有些中文卻消失變成 \xFF 等格式,應該是為求讀入 YAML 將某些雙引號改單引號的結果,也只好一個個手動改回來。

typo 4 post-install

0

源起

除了安裝之外,陸陸續續都會更動 typo 一些設定,這些都紀錄在下面,細節可以參考部落格記載。

資料庫備份

資料庫備份中有很大部分是 sessions 引起,近千筆資料並不會去除,所以備份前可以考慮將這些 sessions 清空,這些 sessions 可以變的很驚人的數量。

On Rails Sessions

基本上使用資料庫在共用環境也快不到哪裡去,因為會期管理變成在不同機器,難免有延遲。typo 本身安裝時就需要資料庫,所以預設是使用 active_record_store。

http://www.typosphere.org/trac/browser/tags/release_4_0_3/config/environment.rb

# Use the database for sessions instead of the file system
# (create the session table with 'rake create_sessions_table')
config.action_controller.session_store = :active_record_store

小圖片很重要

目前為止有兩個小圖提供文章使用,一是 screencast 一是 archive 用,採用上傳到 resource 方式使用,重複使用下,是否可以用 theme 方式包裝。

換景

換成新的佈景。

乾掉的控制器

/showswf 新增。

上傳資源 swf 檔

之前所做的一些螢幕秀檔案。

分析 google analytics 置入碼

在 theme 中加入 js 碼,一但換佈景,就會失效,另外也置入到 /showswf 去。

更換 theme 的 header.jpg

需要更換兩個地方,一個是原先解開的目錄 themes/browntype/images/ 下,一個是 public/images/theme 這個目錄。

public/favicon.ico 上傳

目前看不到,原因不明。

其他問題

突然亂碼議題

不清楚,必須 SSH 登入把 ruby 的行程都刪除,然後進 typo 管理頁將快取頁清掉後正常。

Update : 2006-09-05 again

上傳檔案分類問題

上傳檔案放在 /files 目錄下,一旦檔案偏多,一是不容易找到,一是會造成編輯困難,因為預設編輯文章頁面有資源列表,一個表數百筆,恐怕會很難找。

typo:code or pre

用 typo 的特殊語法對於資料的再轉利用是否會造成麻煩 ? 命名空間的做法需要再考慮。

better cross-ref article

auto cross aricles ref link ? 文章自動註解 ?

Ruby-GetText and zh_TW

2

好玩

之前為了解中文化所需,做了一些 Ruby-GetText 練習。

Ruby-GetText screencast 1

Ruby-GetText screencast 2

來信

日前 Ruby-GetText 維護者 Masao 來信希望協助翻譯 po 檔,單句直接翻很簡單,但是往往導致使用時詞不達意,所以使用上有問題請告知我。

Update 0821

目前的版本供 Ruby-GetText 0.7 使用。

ruby-gettext_zh_TW.zip

Update 0822

Masao 傳給我的輸出畫面連結 Ruby-GetText zh_TW sample screenshot link

翻的不順,還是要找時間改一下,特別是標點符號的問題。

Update 0913

Ruby-GetText 0.8

Google Analytics or Awstats

0

現況

web site analytics 是網站管理工作中極為重要的部份,目前大部分網站皆會有日誌 log 系統,藉由事後分析得到點擊率等等這些資料。之前為 www 網站設置的過程紀錄如下。

Awstats install screencast

蛇吞象

之前作法安裝比較不容易,設定過程需要參閱許多文件,後續維護升級也比較麻煩,所以考慮外包,目前 google 的線上分析服務是免費的,該服務需要的安裝工作集中在網頁端,與系統管理較不相關 也就是 NO-SSH。

另一個好處是報表多國語言化,因為外包,所以維護應該會比較簡單。

外包看看

先申請後,會給一段 js 來用。

Google Analytics

置入性工作

要放在 body 標籤的前面。先用 www 的網站來測試,要先找到 app/views/layouts/main.rhtml 檔來改。

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-606751-1";
urchinTracker();
</script>
先直接看看網頁原始檔,然後可以到 google 去檢查狀態的情形。

置入 typo

在 google 中新增一個設定檔,注意下面的 js 碼和上面不同。
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-606751-2";
urchinTracker();
</script>

放哪裡? 位置應該在 theme/xxxx/layouts/default.rhtml 。

Older posts: 1 2 3