404
錯誤訊息頁面
當妳試圖要在妳的瀏覽器裡載入 mt.cgi -- 或者是在初始程序裡的 mt-load.cgi 或 mt-check.cgi -- 的時候發生了這個錯誤,那麼就是妳的網頁伺服器並沒有在組態設定裡啟用 CGI 腳本支援。
如果妳的網站架在其他人的機器上的話,那麼妳可能得寄信給提供機器的人,並且要求她對妳的帳號(或者是對整個網頁伺服器)開啟 CGI 腳本的權限;這件事很不幸地不是妳以一人之力就得以完成的。
如果妳是在自己的網頁伺服器上執行,或者說妳可以存取網頁組態檔案 -- 同時也有在修改過組態後重新啟動網頁伺服器的權限 -- 的話,妳可以參考這些步驟來在妳的網頁伺服器上啟用 CGI 腳本。下列這些指引假設妳正在執行 Apache 。
Directory
或 Location
區塊。
在這個區塊裡,加入這一列:
Options +ExecCGI
Directory
或 Location
區塊以外的地方,加入這一列:
AddHandler cgi-script .cgi
CGI 腳本現在應該可以執行了,所以就不會顯示出他們的源碼了。
500 Internal Server Error
是某處出錯時所會跑出來的常見網頁伺服器錯誤訊息 -- 更精確地來說,是當試圖執行 CGI 腳本時出錯的時候。
這裡列出了如何診斷並修復這個錯誤的方法:
-w
;這個設定會啟用 Perl 的警告訊息,保持開啟會相當重要。
要得知妳的網頁伺服器上的 Perl 路徑,可能得要看看妳的主機服務的維護頁面。不然如果妳有 shell (命令列)帳號,而妳又習慣這種介面的話,妳也可以登入這個帳號,然後輸入:
$ whereis perl
這應該會告訴妳在妳的系統上 Perl 到底在哪裡。
如果妳執行 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 目錄的完整檔案系統路徑。妳有許多方法可以得知這個路徑:
$ cd 我的/db/
這裡的 我的/db/ 是指從妳的 home 目錄相對的 db 目錄路徑。接著用 pwd 來直接顯示那個目錄的完整路徑:
$ pwd
這個指令會印出完整路徑,然後妳可以複製下來,再貼到妳的 mt.cfg 檔案裡,當作是 DataSource 的值。
用這個方法的時候,把妳的瀏覽器指到妳站台上的 mt-check.cgi 網址以執行 mt-check.cgi 。舉例來說,如果妳的站在位於 http://www.your-site.com/ ,然後妳把 Movable Type 的檔案都上傳到 /mt 目錄裡,所以妳應該鍵入 http://www.your-site.com/mt/mt-check.cgi 。
然後在 mt-check.cgi 的執行結果中,找找看應該有一列會像這樣:
Current working directory: /路徑/指到/妳的/mt/目錄
這也就是妳安裝 Movable Type 目錄的完整路徑。從這個路徑裡,妳應該就能夠知道妳的 db 目錄的完整路徑了。
如果妳得到的錯誤訊息是 Permission denied
的話,通常表示妳的 db 目錄存取權限不正確。請參考安裝指引來看看如何把權限設定成 777 。
當妳首度用 mt.cgi 程式來檢視 Movable Type 應用程式時,如果妳看到某個很長的錯誤訊息,開頭像是 Can't load error template, got error 'Loading template 'error.tmpl' failed
然後一直接下去。這個現象表示 Movable Type 沒辦法在妳的 tmpl 目錄裡找到那個檔案。
發生這種狀況時,請試著這麼做:
除此之外,也請確定這些目錄的名稱中,大小寫是正確的;這些路徑是大小寫敏感的,所以例如當妳的 FTP 程式把目錄名稱改成 Cms 的話,就會爛掉。
修正這個問題的方法是這樣的,首先用文字編輯器開啟妳的 mt.cfg 檔案,然後加入下列這幾列:
TemplatePath /完整/路徑/指到/tmpl/
這裡的 /完整/路徑/指到/tmpl/ 也就是妳的 tmpl 目錄的完整路徑。
儲存 mt.cfg ,然後試著再執行 mt.cgi 一次。
如果當妳執行任何 Movable Type 的 CGI 腳本時,收到像是 Can't locate Some/File.pm in @INC
的錯誤訊息,這裡的 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/
這樣應該就可以解決這個問題了。
這個問題是:妳可以登入系統並且看到主選單
,但是不管妳按下哪一個鏈結,畫面總是會回到登入畫面。
造成這個現象的原因很有可能是因為妳瀏覽器的 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 纔對。
如果妳使用 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 要去哪裡找:
SendMailPath /路徑/指到/sendmail
這裡的 /路徑/指到/sendmail
就是妳在步驟 1 裡所得知的 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 這個 Perl 模組,所以 Movable Type 沒辦法建立上傳圖片的縮圖。從 2.3 版的 Movable Type 起,系統開始支援建立縮圖的替代方法,也就是使用 NetPBM 工具套件。如果妳的系統有 NetPBM 而沒有 Image::Magick 的話,妳會需要做這些事:
http://www.movabletype.org/cpan/cpan-IPC-Run.tar.gz
在妳的 FTP 伺服器上,在 extlib 資料夾裡再建立某個叫做 IPC 的新資料夾,然後把 IPC-Run 套件裡的 Run.pm 檔案和 Run 資料夾上傳到伺服器上的 IPC 資料夾裡。
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 開發者所提供的可執行檔。
當妳重建檔案的時候, Movable Type 首先會把頁面資料寫到某個副檔名為 .new 的暫存檔去;舉例來說,如果 index.html 正被重建,那麼這個暫存檔就會叫 index.html.new 。 Movable Type 這麼做是為了要避免損毀妳的檔案;否則若因為任何原因,重建程序在寫入資料途中就被砍掉了,那麼這些檔案就會不完整,並且在網頁瀏覽器裡爛掉。
寫入這些暫存檔案的過程會需要把本機站台路徑
目錄設定成 777 ;有些使用者不能 -- 或者不願意 -- 如此大方地設定這個權限,然後就會在 Movable Type 不能寫入 .new 暫存檔的時候收到錯誤訊息。如果這對妳來說是個問題的話,妳可以關掉使用暫存檔的選項。要這樣做的話,首先編輯妳的 mt.cfg 檔案,然後加入這一列:
NoTempFiles 1
這會告訴 Movable Type 不要把資料寫到暫存檔,然後妳重建檔案時應該就不再會看到這樣的錯誤訊息了。
把字符編碼成 HTML 項目 -- 不論是在編輯或者是使用 encode_html 全域標籤屬性 -- 的時候, Movable Type 都使用 HTML::Entities 這個 Perl 模組;不過要是妳的伺服器上沒有這個模組,它就會改用一個簡單的編碼程序來把 <
、 >
、 &
和 編碼成適當的項目。
然而在某些情況下, HTML::Entities 對妳的字符卻沒辦法良好運作 -- 這很有可能發生在像是妳的字符被編碼成不同的字元集(如果妳正在使用波蘭文、俄文之類的語言書寫)。在這種情況下,請編輯妳的 mt.cfg 檔案,然後加入這一列:
NoHTMLEntities 1
這會叫 Movable Type 使用它自己的簡單編碼程序,就不會把特殊字符跟妳用的字符混在一起了。
404
錯誤訊息頁面Movable Type 套件中,在 Movable Type 主目錄裡包括了一個 index.html 檔案;當妳把這個檔案上傳到妳的網頁伺服器上時,它可以避免使用者看到目錄清單的內容。這並不表示著這個檔案就能提供防彈安全,但是至少可以避免奇怪的畫面。
這個跟著 Movable Type 一併被發行的版本相當的樸素,妳很有可能會想要加以改進;妳祇需要編輯 index.html 檔案就可以了,他就祇是標準的 HTML 檔案罷了。
如果妳用 Apache 來當妳的網頁伺服器的話,妳還可以用不同的技術來避免使用者瀏覽妳的目錄清單:
Options -Indexes
。
如果妳用了這個技術,妳就可以從目錄裡移去 index.html 檔案了;網頁伺服器現在已經會避免檢視目錄內容清單了。
當妳換過主機提供者(或者祇是搬到不同的伺服器)後,很有可能兩邊的伺服器用了不同版本的 Berkeley DB library ;這是 Movable Type 用來儲存資料用的資料庫。當妳從一個主機複製 DB 檔案到另一個的時候,如果兩個主機的 Berkeley DB 版本不同,那麼新的主機將沒辦法讀取來自舊主機的檔案。
妳可以藉由新版資料庫所提供的 DB 檔案格式轉換功能來修好這個問題;要做這件事有許多不同的方法,端視涉入的 Berkeley DB 版本。需要轉換的資料就是所有在妳的 db 目錄裡的檔案,他們的檔名會以 .db 或者 .idx 結尾(至於 .lock 檔案則不需要被轉換)。
下列的步驟需要用 shell 帳號存取妳的伺服器,而且妳本身要對執行 Unix 命令有一定程度的熟悉纔行;如果很不巧妳不是這樣的人的話,妳恐怕得找主機提供者幫妳。
$ cd <db_dir> $ db_upgrade *.db *.idx
如果妳的伺服器上有 db_upgrade 可用,這就會把妳所有的 DB 檔案轉換成新的格式。如果成功了,那麼妳就已經完成了,請跳過後面所有的步驟;此刻 Movable Type 應該可以正常運作了。
command not found
-- 那麼妳就得按照下列的方法來轉換妳的資料。這個方法會從妳的 DB 檔案裡傾印所有的資料,然後再把這些 DB 檔案載入成新的版本。
用來傾印妳的 DB 檔案的程式可能叫做 db_dump 或 db_dump185 。要知道妳可以用那個程式,首先試著在妳的 shell 帳號裡執行下列的指令:
$ cd <db_dir> $ db_dump author.db
如果這個指令成功了,妳就會看到資料已成功傾印的訊息;否則妳就會得到某個錯誤訊息;在後面這種情況下,再試試看下列的指令:
$ db_dump185 author.db
再一次,如果這個指令成功了,妳就會看到資料已成功傾印的訊息。如果這樣仍舊失敗了,那妳就得聯絡妳的主機提供者了。
$ 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 應該可以正常運作了。