Rexdf

The devil is in the Details.

Movabletype安装

| Comments

大名鼎鼎的Movable Type(简称MT),曾经风靡一时,后来因为种种原因被Wordpress赶超,虽然当初勉为其难地开源又转为收费,其中的折腾自是不用多说,但是在很多人心中依然认为只有MT才算是真正的博客系统,写作发布,静态化的博客速度简直不是一般的快。 我首先是发现Openshift可以支持Perl,于是想安装MT试试,采用了github源git直接安装,结果Openshift发现里面有一个makefile还是怎么的,上传上去后一直编译中,开始不懂以为perl是要编译的,后来才知道其实他是在检测依赖关系,把出现过的脚本全部依赖库都检测一遍,然后最后就出现了Error,好像一直是在Oracle DB的链接库上,这是显然的。搜索解决方案中惊讶的发现Openshift上面可以编译程序,居然可以ssh进去之后wget一个per16.3.1.tar的源码然后解压编译一个自己的源码,可以参考这里,我在想Openshift是不是可以做一个OJ了,居然支持编译,简直就是VPS啊!! Google里面似乎没有人说直接在上面成功搭建过MT,但是有人尝试失败过,我经过一些尝试最后发现了只要在.openshift/marker/下面touch一个hot_deploy就不会重新编译了,而且git push之后的代码结构是不会变的。这样就可以相当于ftp上传的效果了(发现如果支持git,那么git比ftp一般快不止一个数量级,具体原因还有待分析),另外还有一些参数enable_cpan_tests, force_clean_build等switch可以设置。参考这里,在document里面有,但是现在是404错误,不知道是不是github的问题(CNAME需要设置子目录吗?)。 接着继续讲Openshift上的安装,无意中在一次hot_deploy的情况下,我进去了安装界面,然后非常意外的,点击下一步下一步,最后进入了博客系统,还发布了一遍表示兴奋的“文章,于是立马绑上了一个域名,然后就问题也出现了,发现再次写一遍的时候不停的Gateway Time Out,起初我还能忍受,后来发现简直点一下鼠标出现一次,需要不停刷新,于是乱掉了,重复发了那么多文章我都不知道,然后发布,居然也成功了,不过今天进去再次写一点发布的时候就一直Gateway Time Out了,没办法,放弃吧。想到是静态化的,何不本地生成,网络发布,于是Win8下试着安装,我不想用Stawberry Perl或者ActivePerl,虽然这两个以前一直安装,但是自从发现Cygwin最近常更新之后就再也不用那两个了。这样包需要自己安装首先

perl -MCPAN -e "shell"

在没有安装CPAN的时候shell是需要加引号的,安装好之后就无所谓了,这里有一个trick的地方是要选no,不要自动配置

Would you like to configure as much as possible automatically? [yes]

选了no之后就有一系列的配置,这里需要自己手动安装同时打开Cygwin的包安装器setup-x86.exe(或者setup-x86_64.exe),发现提示什么没有就安装什么,目录是在cygwin/bin,推荐把所有的执行程序都改成/bin/xx.exe就可以了,当然exe省掉是可以的,而且更有Linux的味道。这样就把Per的CPAN安装好了,再次执行

perl -MCPAN -e "shell"

进入

cpan shell -- CPAN exploration and modules installation (v2.00)
Enter 'h' for help.

cpan[1]> 

这时就可以安装CPAN里面的包了,一个推荐的安装是

notest install Dancer Mojolicious DBD::Pg DBD::SQLite DBD::mysql DBI Image::Size CGI::Cookie IPC::Run Authen::SASL Cache::Memcached Cache::File Crypt::SSLeay GD Crypt::DSA XML::Parser Digest::SHA1 Plack Imager XML::Atom XMLRPC::Transport::HTTP::Plack Net::SMTP::SSL DBD::SQLite2 Cache::File CGI::PSGI GD CGI::Parse::PSGI Image::Magick Imager DBD::Pg HTML::Template

执行完了quit退出。需要说明的是需要先在Cygwin里面安装好GD和Image Magick等包,还有就是Cygwin的各个c/c++编译包是要的,在devel目录下面好像是有三套不同的开发包的,分别针对MingW和Cygwin以及gnu gcc本身的,一般我都是全部安装(指这三套,不是所有语言比如fortan我就百分百不会安装)。 接下去就是配置cgi-bin目录问题了,这里不能用cgi-bin专用目录,因为ScriptAlias /cgi-bin/ “D:/Users/Rexdf/php/Web/cgi-bin/”这样做的就是CGI目录,会把其下面全部文件都当做cgi程序执行,这样的话一个html文件也会被当做脚本执行,然后提示500服务器内部错误,解决办法是把这一行注释掉,然后让它成为普通目录,配置下面的语句,可以在vhosts.conf里面,也可以在httpd.conf里面

<Directory "D:/Users/Rexdf/php/Web/cgi-bin">
    AllowOverride All 
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
    Allow from all
    Order allow,deny 
</Directory>

这里关键的即使Options +ExecCGI了,同时也要在AddType application/x-httpd-php .php这一行上面一些地方添加AddHandler cgi-script .cgi .pl,这样就可以了。 接下去就是Cygwin里面的perl如何连接数据库的问题了,自然最好的选择是Mysql(好像可以支持SQLite,但是我没配置成功),Cygwin的包里面有Mysql的Server也有Mysql的Client,我们需要的只有Client,因为我系统已经安装了最新5.6.12而且正打算升级到5.6.14,不必使用Cygwin里面的5.5.31什么的。一般会遇到如下的错误: Error: Can’t connect to local MySQL server through socket ‘/var/run/mysql.sock’ 需要做的就是配置Mysql Client,把D:\Users\rexdf\cygwin\usr\share\mysql里面的my-huge.cnf复制到D:\Users\rexdf\cygwin\etc\my.cnf,可以用如下命令

cp /usr/share/mysql/my-huge.cnf /etc/my.cnf

同时编辑其中内容,在client最后添加一行protocol = TCP。然后做如下的两个测试 1.命令行测试

mysql -h 127.0.0.1 -P 3306 -u root -P

输入密码如果进入数据库并显示5.6.12数据库的欢迎信息,那么就client是OK的了。 2.Perl的DBD::msqyl测试 脚本如下

#!bin/perl
use DBI;
my $dbname = "movabletype_db";#这个数据库现在phpMyAdmin里面建立好
my $location = "127.0.0.1";
my $port = "3306"; #这是mysql的缺省
my $database = "DBI:mysql:$dbname:$location:$port";
my $db_user = "root";
my $db_pass = "您的密码";
my $dbh = DBI->connect($database,$db_user,$db_pass);
my $sql = "SELECT first_name,last_name FROM $table ORDER BY first_name";
my $sth = $dbh->prepare($sql);
$sth->execute() or die "无法执行SQL语句:$dbh->errstr"; 
$dbh->disconnect;#断开数据库连接

如果看到的是无法执行SQL,而不是Error: Can’t connect to local MySQL server through socket ‘/var/run/mysql.sock’,那么恭喜你成功了,可以进入下一步的正式安装了,先下载

git clone https://github.com/movabletype/movabletype.git

Comments