Movable Type 使用手冊:障礙排除

« 目錄


障礙排除

我執行 Movable Type 的時候看到 CGI 腳本的源碼

當妳試圖要在妳的瀏覽器裡載入 mt.cgi -- 或者是在初始程序裡的 mt-load.cgimt-check.cgi -- 的時候發生了這個錯誤,那麼就是妳的網頁伺服器並沒有在組態設定裡啟用 CGI 腳本支援。

如果妳的網站架在其他人的機器上的話,那麼妳可能得寄信給提供機器的人,並且要求她對妳的帳號(或者是對整個網頁伺服器)開啟 CGI 腳本的權限;這件事很不幸地不是妳以一人之力就得以完成的。

如果妳是在自己的網頁伺服器上執行,或者說妳可以存取網頁組態檔案 -- 同時也有在修改過組態後重新啟動網頁伺服器的權限 -- 的話,妳可以參考這些步驟來在妳的網頁伺服器上啟用 CGI 腳本。下列這些指引假設妳正在執行 Apache 。

  1. 找到 httpd.conf 組態檔案,並且以某個編輯器開啟。

  2. 找到組態伺服器上 webroot 的 DirectoryLocation 區塊。

    在這個區塊裡,加入這一列:

    Options +ExecCGI
    

  3. DirectoryLocation 區塊以外的地方,加入這一列:
    AddHandler cgi-script .cgi
    

  4. 重新啟動網頁伺服器。

CGI 腳本現在應該可以執行了,所以就不會顯示出他們的源碼了。

我祇看到 500 Internal Server Error

500 Internal Server Error 是某處出錯時所會跑出來的常見網頁伺服器錯誤訊息 -- 更精確地來說,是當試圖執行 CGI 腳本時出錯的時候。

這裡列出了如何診斷並修復這個錯誤的方法:

執行 mt-load.cgi 的時候發生錯誤

如果妳執行 mt-load.cgi 的時候看到 Tie '/path/to/db' failed: No such file or directory 或者是 Tie '/path/to/db' failed: Permission denied 這樣的錯誤訊息,就表是妳在 mt.cfg 裡面所設定的 DataSource 路徑不正確;不然就是妳的 db 目錄權限設定不正確。

DataSource 設定必須要包含妳的 db 目錄的完整檔案系統路徑。妳有許多方法可以得知這個路徑:

如果妳得到的錯誤訊息是 Permission denied 的話,通常表示妳的 db 目錄存取權限不正確。請參考安裝指引來看看如何把權限設定成 777

``無法載入模版''

當妳首度用 mt.cgi 程式來檢視 Movable Type 應用程式時,如果妳看到某個很長的錯誤訊息,開頭像是 Can't load error template, got error 'Loading template 'error.tmpl' failed 然後一直接下去。這個現象表示 Movable Type 沒辦法在妳的 tmpl 目錄裡找到那個檔案。

發生這種狀況時,請試著這麼做:

  1. 首先確定妳的 tmpl 目錄跟 mt.cgi 放在同一個地方;然後在 tmpl 裡面還有個叫做 cms 的目錄;繼續在 cms 裡面還有好幾個副檔名是 .tmpl 的檔案。

    除此之外,也請確定這些目錄的名稱中,大小寫是正確的;這些路徑大小寫敏感的,所以例如當妳的 FTP 程式把目錄名稱改成 Cms 的話,就會爛掉。

  2. 如果所有的檔案都在他們應該在的地方,那麼整個狀況就會變成是妳的網頁伺服器在不同的工作路徑執行 CGI 腳本,然而這些 CGI 腳本根本不在哪裡!

    修正這個問題的方法是這樣的,首先用文字編輯器開啟妳的 mt.cfg 檔案,然後加入下列這幾列:

    TemplatePath /完整/路徑/指到/tmpl/
    

    這裡的 /完整/路徑/指到/tmpl/ 也就是妳的 tmpl 目錄的完整路徑。

    儲存 mt.cfg ,然後試著再執行 mt.cgi 一次。

無法載入 Perl 模組

如果當妳執行任何 Movable Type 的 CGI 腳本時,收到像是 Can't locate Some/File.pm in @INC 的錯誤訊息,這裡的 Some/File.pm 是某個檔案的檔名,妳應該照著下列的步驟來修正這個問題:

  1. 首先,妳應該執行 mt-check.cgi 來確定 Movable Type 所會用到的 Perl 模組都已經安裝在妳的網頁伺服器上了。如果沒有的話,請參照安裝指引的說明來安裝。

  2. 確定在妳存放 CGI 檔案(像是 mt.cgi )的地方,有一個叫做 lib 的目錄,裡面應該正好有著剛剛錯誤訊息理所提到的那個檔案(像是Some/File.pm )。再舉個例子說明,以上面那個錯誤訊息來說,這裡應該會有 lib/Some/File.pm

    請注意檔名對於大小寫是有別的,所以如果那個目錄其實是 Lib 的話,就會爛掉。另外像是 some/file.pm 也跟 Some/File.pm 不同;後面那個纔是正確的,而都是小寫的那個在這裡則會爛掉。

無法顯示圖片、樣式以及文件

當妳首度檢視 Movable Type 的時候,如果圖片跟樣式在妳的瀏覽器裡沒有正確顯示出來,那麼妳得把這些圖片、文件和樣式給移到不同的位置去。原因是妳顯然把 Movable Type 安裝到妳的 cgi-bin 目錄裡,有可能 -- 祇是推測 --妳在妳的伺服器上就是需要這樣做。但是把非 CGI 的檔案放到 cgi-bin 目錄裡卻可能會有問題,因為有的時候網頁伺服器會試著去執行這些圖片,就好像在執行其他程式一樣。

要修正這個錯誤,妳得重新把圖片目錄( images )、文件目錄( docs )和樣式( styles.css )上傳到 cgi-bin 之外的其他目錄。然後編輯 mt.cfg 檔案,加入這一列:

StaticWebPath /路徑/指到/目錄/

這裡的 /路徑/指到/目錄/ 是包含有圖片styles.css 的目錄的網址。舉例來說,如果 images 位於 /movable-static/images/ ,那麼妳就該用

StaticWebPath /movable-static/

這樣應該就可以解決這個問題了。

我一直回到 Movable Type 登入畫面

這個問題是:妳可以登入系統並且看到主選單,但是不管妳按下哪一個鏈結,畫面總是會回到登入畫面。

造成這個現象的原因很有可能是因為妳瀏覽器的 cookies 被停用了。 Movable Type 必須使用 cookie 來儲存妳的認證資訊;在這個 cookie 裡,妳的密碼會被單向加密,所以不會有安全性的顧慮。然而如果妳不允許這個 cookie 的話, Movable Type 就無從得知你是否已經成功地登入了,所以當妳想要做任何事的時候,它都會呈現登入畫面。

修正這個錯誤的方法就是在妳的瀏覽器裡啟用 cookie 。

我沒辦法登出!

這個問題是:妳已經登入 Movable Type 了,但是每當妳試圖登出以登入成另一個使用者(舉例來說)的時候,仍然會登入成妳原來的身份。

這很有可能是因為妳的瀏覽器有許多不同版本的 Movable Type 登入 cookie 所致。確實的原因應該是因為這個 cookie 乃是依據網域名稱而定的;所以如果妳有兩個網域名稱會存取到同一份 Movable Type ,而妳不巧又同時用了這兩個網址,那麼妳就會有兩個版本的 Movable Type cookie 。如果其中一個域名是另一個域名的一部份 -- 舉例來說,其中一個域名可能是 www.foo.com 而另一個是 foo.com -- 那麼妳就需要在兩邊都登出纔是真正的登出。所以妳要分別用兩個域名載入 Movable Type ,然後都登出。

因為這個原因,妳應該保持祇用同一個域名來存取 Movable Type 纔對。

我的 PHP 輸出檔案需要能被執行

如果妳使用 Movable Type 來產生 PHP 檔案的話,某些網頁伺服器會要求妳設定這些檔案的執行位元(也就是說這些檔案的權限至少應該要是 755 )。在預設的情況下,所有由系統產生的檔案權限都會是 666 ,所以妳就會看到檔案沒辦法被執行的錯誤訊息。

要解決這個問題,妳得在妳的 mt.cfg 檔案裡加入這一列:

HTMLPerms 0777

這會把所有由系統建立的檔案預設權限設成 777 ;請注意如果妳在 mt.cfg 裡還用了 HTMLUmask 設定的話, HTMLPerms 的值就會被 umask 設定加以調整。舉例來說,如果妳把 HTMLPerms 設成 0777 ,而把 HTMLUmask 設成 0022 ,那麼所有系統產生出來的檔案權限就都會是 0755

我總是沒有收到迴響的電子郵件通告

注意:這個問題的另一個症狀是透過編輯文章項目所寄出的通告訊息從來沒有真的寄到通告清單裡的信箱。

如果妳知道有使用者在妳的站台發表了迴響,而妳卻沒有收到的話,妳首先應該要檢查妳的網誌組態,確認是否核選了有新的迴響時寄給我

如果妳有的話,那麼最可能的問題可能就是出在網頁伺服器上 sendmail 程式的路徑了。 Movable Type 會在這三個路徑裡尋找 sendmail/usr/lib/sendmail/usr/sbin/sendmail/usr/ucblib/sendmail 。這也是 Unix 機器上 sendmail 最常見的擺放位置。如果妳的 sendmail 放在不同的地方,可以參考下列的指引來告訴 Movable Type 要去哪裡找:

  1. 判斷妳的網頁伺服器上 sendmail 的路徑。妳可能得詢問主機提供者或者是系統管理員纔能知道。

  2. 在妳安裝 Movable Type 的目錄裡,有個叫 mt.cfg 的檔案;下載這個檔案並用某個編輯器開啟它。(如果妳習慣使用 shell 的話,其實妳就不需要下載這個檔案了,而可以直接用 vi 或其他妳喜歡的編輯器直接開啟。)

  3. 在這個檔案裡加入這一列:
    SendMailPath /路徑/指到/sendmail
    

    這裡的 /路徑/指到/sendmail 就是妳在步驟 1 裡所得知的 sendmail 路徑。

  4. 儲存 mt.cfg 並且重新上傳到妳的伺服器上。請確定妳用了 ASCII (文字)模式上傳。(如果妳剛剛是用 shell 編輯檔案的話,就跳過這一步吧。)

這樣就好了;如果 sendmail 的路徑正確的話,妳現在應該就可以收到新迴響的電子郵件通告了。

我的網頁伺服器沒有 sendmail

如果妳已經用上述的步驟努力試著讓 sendmail 運作起來,或者是妳知道妳的網頁伺服器並沒有 sendmail -- 舉例來說, Win32 機器上就不會有 sendmail -- Movable Type 也允許妳用 SMTP 來寄出郵件訊息。要這樣做之前,妳得先安裝 Mail::Sendmail 這個 Perl 模組;如果妳在 Win32 機器上,那麼妳可以用 Activestate 的 ppm 工具。執行 ppm ,然後在提示符號裡鍵入

install Mail::Sendmail

接著 ppm 就會把所有安裝模組該做的事做完。如果妳使用的不是 Win32 的機器而妳需要(或想要)用 SMTP 的話,妳可以直接從這裡下載這個套件:

http://www.movabletype.org/cpan/cpan-Mail-Sendmail.tar.gz

把這個壓縮檔用解壓縮程式解開,然後用 FTP 連到妳的網頁伺服器。打開妳安裝 Movable Type 的目錄,然後再打開 extlib 目錄;接著建立一個叫做 Mail 的新目錄,再打開這個 Mail 目錄,並把壓縮檔裡的 Sendmail.pm 上傳到這個 Mail 目錄裡。

在妳安裝過這個 Mail::Sendmail 之後,妳還需要加以組態 Movable Type 來用 SMTP 寄信。首先編輯妳的 mt.cfg 檔案,然後加入這一列:

MailTransfer smtp

預設的情況下, Movable Type 會使用妳的網頁伺服器上(也就是在 localhost )的 SMTP 伺服器;如果妳需要加以更換,就再加入另一列:

SMTPServer smtp.伺服器.的.地址

儲存(有需要的話就重新上傳)妳的 mt.cfg 檔案,就完成了。 Movable Type 現在應該會從 SMTP 伺服器寄信了。

我的主機沒有 Image::Magick

有些主機沒有 Image::Magick 這個 Perl 模組,所以 Movable Type 沒辦法建立上傳圖片的縮圖。從 2.3 版的 Movable Type 起,系統開始支援建立縮圖的替代方法,也就是使用 NetPBM 工具套件。如果妳的系統有 NetPBM 而沒有 Image::Magick 的話,妳會需要做這些事:

  1. 安裝 IPC::Run
    妳得需要安裝 IPC::Run 這個 Perl 模組,這樣 Movable Type 纔能夠拿來跟 NetPBM 工具溝通。從這個網址下載這個檔案:
    http://www.movabletype.org/cpan/cpan-IPC-Run.tar.gz
    

    在妳的 FTP 伺服器上,在 extlib 資料夾裡再建立某個叫做 IPC 的新資料夾,然後把 IPC-Run 套件裡的 Run.pm 檔案和 Run 資料夾上傳到伺服器上的 IPC 資料夾裡。

  2. 編輯 mt.cfg
    編輯妳的 mt.cfg 檔案,並加入這一列:
    ImageDriver NetPBM
    

    在預設的情況下, Movable Type 會從下列的路徑中尋找 NetPBM 工具: /usr/local/netpbm/bin/usr/local/bin/usr/bin 。如果妳需要設定到不同的路徑的話,就在 mt.cfg 裡面再加入這一列:

    NetPBMPath /路徑/指到/netpbm
    

    儲存(有需要的話就重新上傳)妳的 mt.cfg 檔案,這樣就好了。

如果妳的主機沒有 NetPBM ,或者是妳是在自己的伺服器上執行時,那麼妳可以從 http://netpbm.sourceforge.net/ 下載並安裝 NetPBM 工具套件。如果妳偏好(或需要)預先編譯過的可執行檔,妳也可以從 http://sourceforge.net/project/showfiles.php?group_id=7130 下載 Gallery 開發者所提供的可執行檔。

我重建檔案的時候出現了一個關於 .new 檔案的錯誤

當妳重建檔案的時候, Movable Type 首先會把頁面資料寫到某個副檔名為 .new 的暫存檔去;舉例來說,如果 index.html 正被重建,那麼這個暫存檔就會叫 index.html.new 。 Movable Type 這麼做是為了要避免損毀妳的檔案;否則若因為任何原因,重建程序在寫入資料途中就被砍掉了,那麼這些檔案就會不完整,並且在網頁瀏覽器裡爛掉。

寫入這些暫存檔案的過程會需要把本機站台路徑目錄設定成 777 ;有些使用者不能 -- 或者不願意 -- 如此大方地設定這個權限,然後就會在 Movable Type 不能寫入 .new 暫存檔的時候收到錯誤訊息。如果這對妳來說是個問題的話,妳可以關掉使用暫存檔的選項。要這樣做的話,首先編輯妳的 mt.cfg 檔案,然後加入這一列:

NoTempFiles 1

這會告訴 Movable Type 不要把資料寫到暫存檔,然後妳重建檔案時應該就不再會看到這樣的錯誤訊息了。

Movable Type 在我所使用的語言中出現錯誤的編碼

把字符編碼成 HTML 項目 -- 不論是在編輯或者是使用 encode_html 全域標籤屬性 -- 的時候, Movable Type 都使用 HTML::Entities 這個 Perl 模組;不過要是妳的伺服器上沒有這個模組,它就會改用一個簡單的編碼程序來把 <>& 編碼成適當的項目。

然而在某些情況下, HTML::Entities 對妳的字符卻沒辦法良好運作 -- 這很有可能發生在像是妳的字符被編碼成不同的字元集(如果妳正在使用波蘭文、俄文之類的語言書寫)。在這種情況下,請編輯妳的 mt.cfg 檔案,然後加入這一列:

NoHTMLEntities 1

這會叫 Movable Type 使用它自己的簡單編碼程序,就不會把特殊字符跟妳用的字符混在一起了。

我不喜歡 MT 中出現的 404 錯誤訊息頁面

Movable Type 套件中,在 Movable Type 主目錄裡包括了一個 index.html 檔案;當妳把這個檔案上傳到妳的網頁伺服器上時,它可以避免使用者看到目錄清單的內容。這並不表示著這個檔案就能提供防彈安全,但是至少可以避免奇怪的畫面。

這個跟著 Movable Type 一併被發行的版本相當的樸素,妳很有可能會想要加以改進;妳祇需要編輯 index.html 檔案就可以了,他就祇是標準的 HTML 檔案罷了。

如果妳用 Apache 來當妳的網頁伺服器的話,妳還可以用不同的技術來避免使用者瀏覽妳的目錄清單:

  1. 在妳安裝 Movable Type 的目錄裡建立一個叫 .htaccess 的檔案。

  2. 在編輯器裡開啟這個檔案。

  3. 在這個檔案裡增加一行 Options -Indexes

  4. 儲存這個檔案,然後退出編輯器。

如果妳用了這個技術,妳就可以從目錄裡移去 index.html 檔案了;網頁伺服器現在已經會避免檢視目錄內容清單了。

我變更過主機後,現在沒辦法登入 Movable Type

當妳換過主機提供者(或者祇是搬到不同的伺服器)後,很有可能兩邊的伺服器用了不同版本的 Berkeley DB library ;這是 Movable Type 用來儲存資料用的資料庫。當妳從一個主機複製 DB 檔案到另一個的時候,如果兩個主機的 Berkeley DB 版本不同,那麼新的主機將沒辦法讀取來自舊主機的檔案。

妳可以藉由新版資料庫所提供的 DB 檔案格式轉換功能來修好這個問題;要做這件事有許多不同的方法,端視涉入的 Berkeley DB 版本。需要轉換的資料就是所有在妳的 db 目錄裡的檔案,他們的檔名會以 .db 或者 .idx 結尾(至於 .lock 檔案則不需要被轉換)。

下列的步驟需要用 shell 帳號存取妳的伺服器,而且妳本身要對執行 Unix 命令有一定程度的熟悉纔行;如果很不巧妳不是這樣的人的話,妳恐怕得找主機提供者幫妳。

  1. 首先,也是最重要的一件事就是備份妳的 DB 檔案;妳需要把妳 db 目錄裡所有的檔案做一份備份起來。(如果妳備份的方法是把他們從目錄裡下載的話,請確定妳用了 binary 模式來傳輸檔案。)

  2. 轉換 DB 檔案最簡單的方法就是使用 db_upgrade 程式;很不幸地這並非在每個伺服器上都可以用,不過也許剛好妳就是有得用也不一定。要一試有無,請先登入妳的 shell 帳號,然後在妳的 shell 提示符號裡鍵入下列指令(這裡的 <db_dir> 是妳的 db 目錄路徑):
    $ cd <db_dir>
    $ db_upgrade *.db *.idx
    

    如果妳的伺服器上有 db_upgrade 可用,這就會把妳所有的 DB 檔案轉換成新的格式。如果成功了,那麼妳就已經完成了,請跳過後面所有的步驟;此刻 Movable Type 應該可以正常運作了。

  3. 如果上面的 db_upgrade 指令沒有作用 -- 例如妳得到某個錯誤訊息說 command not found -- 那麼妳就得按照下列的方法來轉換妳的資料。這個方法會從妳的 DB 檔案裡傾印所有的資料,然後再把這些 DB 檔案載入成新的版本。

    用來傾印妳的 DB 檔案的程式可能叫做 db_dumpdb_dump185 。要知道妳可以用那個程式,首先試著在妳的 shell 帳號裡執行下列的指令:

    $ cd <db_dir>
    $ db_dump author.db
    

    如果這個指令成功了,妳就會看到資料已成功傾印的訊息;否則妳就會得到某個錯誤訊息;在後面這種情況下,再試試看下列的指令:

    $ db_dump185 author.db
    

    再一次,如果這個指令成功了,妳就會看到資料已成功傾印的訊息。如果這樣仍舊失敗了,那妳就得聯絡妳的主機提供者了。

  4. 現在妳已經知道要用哪一個 db_dump 程式(可能是 db_dumpdb_dump185 )了,所以妳可以把所有的資料從妳舊的 DBM 檔案裡請印出來,然後再把這些檔案載入成新的版本。請照下列的步驟來做(如果有需要的話,請把所有的 db_dump 替換成 db_dump185 ):
    $ db_dump -f author.db.data author.db
    $ mv author.db author.db.old
    $ db_load -f author.db.data author.db
    $ chmod 666 author.db
    

    對每個在妳的 db 目錄裡、以 .db.idx 結尾的的檔案,妳都需要執行這四個指令。做完這些事後就完成了,現在妳的 Movable Type 應該可以正常運作了。


Copyright © 2001-2003 Six Apart. All Rights Reserved.