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 应该可以正常运作了。