在SAE搭建wordpress

SAE更新以后似乎没有免费的wordpress4sae了,而且有诸多限制,所以我尝试手动将wordpress当做普通应用建在SAE上。可以自由安装模板、主题,可以导入日志数据。


1.准备工作

本地安装svn,下载wordpress的源码;在SAE上创建新应用,开发语言为php;初始化应用的代码库;初始化应用的mysql,并且创建一个新的storage domain,比如就叫wordpress。账号最好要通过实名认证,否则应用租金很贵,通过实名认证后,得到2000云豆,按每天5个计算,可用400天。

2.上传代码

首先从服务器上将初始化的代码checkout下来,仓库地址为https://svn.sinaapp.com/app_name,密码是安全密码。这时应该会得到一个以数字命名的目录。

将wordpress的代码复制到数字目录下,注意不要复制代码的根目录,因为必须保证index.php位于数字目录内,否则SAE会报告url not found。

将这些代码添加到代码库后commit,访问应用地址应该就能看到经典的wordpress配置页面了。

3.安装数据库

使用经典安装向导是无法初始化数据库的。按照wp-config-sample.php手动创建wp-config.php,并且修改几个数据库选项:

define('DB_NAME', SAE_MYSQL_DB);
define('DB_USER', SAE_MYSQL_USER);
define('DB_PASSWORD', SAE_MYSQL_PASS);
define('DB_HOST', SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT);

再次访问应用主页,wordpress应该已经安装成功。

4.安装插件和主题

因为没有写权限,不能在网页内直接安装主题和插件,我们必须使用svn进行上传。

wordpress的插件和主题代码分别放在wp-content/plugins和wp-content/themes目录下,我们可以将其看做代码的一部分,将喜欢的插件和主题代码放入对应目录,然后更新代码库,这时就可以在网页上看到这些插件和主题了。

5.导入数据库

有时希望将旧博客的数据迁移过来,按照前一章的方法安装wordpress importer插件,并且从旧博客导出数据:一个xml文件。这时遇到了最大的困难,importer会尝试将xml文件保存在应用的目录里,但是我们是没有目录写权限的,导入失败。

这时就要用到第一章创建的storage domain了,这是SAE为应用提供的存储资源,我们必须让importer将xml文件放到storage domain里去。需要修改一下wordpress的代码,将所以的写文件操作都重定向到storage。参照的是这个帖子我可以上传自己的wordpress吗,和应用里的不一样吗?

应用根目录,创建sae.php,

<?php
/* 在SAE的Storage中新建的Domain名,比如“wordpress” */
define('SAE_STORAGE',wordpress);
/* 设置文件上传的路径和文件路径的URL,不要更改 */
define('SAE_DIR', 'saestor://'.SAE_STORAGE.'/uploads');
define('SAE_URL', 'http://'.$_SERVER['HTTP_APPNAME'].'-'.SAE_STORAGE.'.stor.sinaapp.com/uploads');
?>

修改wp-includes/functions.php文件,

require( ABSPATH . WPINC . '/option.php' );

前添加

include( ABSPATH . '/sae.php' );  //调用SAE的Storage文件域名设置  //for SAE

注释掉如下代码,

//$wrapper = null;
// strip the protocol
//if( wp_is_stream( $target ) ) {
//    list( $wrapper, $target ) = explode( '://', $target, 2 );
//}
// from php.net/mkdir user contributed notes
//$target = str_replace( '//', '/', $target );
// put the wrapper back on the target
//if( $wrapper !== null ) {
//    $target = $wrapper . '://' . $target;
//}

替换为,

//for SAE begin
// from php.net/mkdir user contributed notes
if ( substr($target, 0, 10) == 'saestor://' ) {
return true;
}
$target = str_replace( '//', '/', $target );
//for SAE end

$basedir = $dir;

的上面添加

// for SAE begin
$dir = SAE_DIR;
$url = SAE_URL;
//for SAE end
/** * Send a HTTP header to limit rendering of pages to same origin iframes.

的上面添加,

// for SAE begin
if ( !function_exists('utf8_encode') ) {
function utf8_encode($str) {
$encoding_in = mb_detect_encoding($str);
return mb_convert_encoding($str, 'UTF-8', $encoding_in);
}
}
//for SAE end

修改wp-admin/includes/file.php,注释掉如下代码,

// Set correct file permissions
//$stat = stat( dirname( $new_file ));
//$perms = $stat['mode'] & 0000666;
//@ chmod( $new_file, $perms );

posted on 2013-09-10 16:23  OpenNaive  阅读(524)  评论(0编辑  收藏  举报

导航