缘起

SAE 和其他的平台有些不同,不能在服务器上运行 Composer 来安装各种包,必须把源码都提交上去。一般的做法,可能是直接把源码的所有文件复制到目录中,添加到版本库。不过,这样就失去了与上游代码的同步的优势。还好 git 提供了另一个功能叫 subtree,不但提供了版本追踪的功能,让代码可以一直和上游同步,同时源码文件还能提交到当前的仓库中。

过程

首先,当然是要安装 git 的 subtree 命令。这个命令虽然随 git 一起安装了,但默认并没有启用。每个平台的安装方法有所不同,请自行搜索安装。

第二步,将 think 和 framework 添加到远程仓库:

 git remote add -f think https://github.com/top-think/think
git remote add -f framework https://github.com/top-think/framework

这样,两个 repo 就加到本地,并且 fetch 下来了。下面创建一个空的项目,并用git 初始化。记得至少提交一次。

 mkdir demo
cd demo
git init
touch README.md
git add .
git commit -am "First commit."

重点来了,用 subtree 将 repo 绑定到目录里。

git subtree add --prefix tp5 think master --squash
git subtree add --prefix tp5/thinkphp framework master --squash

上面这是关键步骤。完成之后,基本的 ThinkPHP 5 框架就搞好了。不过,默认的 ThinkPHP 5 需要写入到本地文件,这在 SAE 上是不允许的。还好 ThinkPHP 团队提供了 SAE 的扩展:https://github.com/top-think/think-sae。这里略微的不够完美。默认的这个包是通过 composer 提供的,可我们这里不能使用 composer 来安装。在研究了一下 ThinkPHP 5 的 autoload 机制以后,我发现他提供了一个 PSR-4 的加载机制。所以需要把 SAE 扩展的 src 目录下三个 PHP 文件复制到 tp5/thinkphp/library/think/sae 下。这里 sae 这个目录是不存在的,需要自己创建。因为我没有深入阅读 ThinkPHP 5 的源码,所以没有找到怎么配置 PSR-4 的加载路径的方式。所以,只有这三个文件没法和上游同步。SAE 扩展需要一些配置,请参考扩展的首页。不过为了让ThinkPHP在非SAE环境中也能运行,需要对配置文件进行一些设置。首先是在 public/index.php 里定义一个常量来标识是不是在SAE环境中:

 define("IN_SAE", defined("SAE_MYSQL_USER"));

然后在配置文件里,可以这样:

 'log'=>[
'type' => IN_SAE ? '\think\sae\Log' : 'File',
]

类似这样,讲每个配置区分为本地配置和SAE环境配置。

然后,按照 SAE 的说明,将代码推送到 SAE 上就可以了。

更新上游代码:

git fetch think master
git subtree pull --prefix tp5 think master --squash
git fetch framework master
git subtree pull --prefix tp5/thinkphp framekwork master --squash

如此,便可以愉快的在 SAE 上玩耍 ThinkPHP 5 了。

在 SAE 上部署 ThinkPHP 5.0 RC4的更多相关文章

  1. 在Nginx上部署ThinkPHP,解决Pathinfo问题

    在Nginx上部署ThinkPHP,解决Pathinfo问题 事实上.要解决nginx不支持pathinfo的问题.有两个解决思路,一是不使用pathinfo模式,二是改动nginx的配置文件,使它支 ...

  2. 关于在BAE上部署ThinkPHP框架的问题

    现在有点小兴奋,因为在在BAE上部署ThinkPHP框架的问题快折腾一天了,午觉都没睡,不过没白整总算有点结果.不扯淡了,直入正题吧. 之前熟悉ThinkPHP框架,想在BAE上用ThinkPHP做点 ...

  3. IIS 6.0上部署.NET 4.0网站

    最近需要把VS2010开发的网站部署到Windows Server 2003的服务器上去, Windows Server 2003操作系统自带的为IIS 6.0,IIS 6.0一般只支持.NET 2. ...

  4. 在CentOS上部署kubernetes1.9.0集群

    原文链接: https://jimmysong.io/kubernetes-handbook/cloud-native/play-with-kubernetes.html (在CentOS上部署kub ...

  5. 成功在BAE上部署ghost 5.0

    这周摸索着网站的建设,终于在今天成功上线!这里要谢谢ghost中文网和群里的网友,他的博客在这opengiser.他们的帮助太重要了.现在把过程记录下来,共同学习.试运营地址在edwardesire. ...

  6. 在新浪sae上部署WeRoBot

    花了整整一个下午,终于在新浪sae部署完成WeRoBot,现在将其中的曲折记录下来. 首先下载WeRoBot-SAE-demo,按照README.md中的要求,执行下述命令: git clone gi ...

  7. win2003 sp2+iis 6.0上部署.net 2.0和.net 4.0网站的方法

    网站环境 IIS6.0,操作系统Windows server2003 sp2,服务器之前已经部署了.net 2.0和asp的网站,现在要部署新开发的.net 4.0网站.本来认为很简单,却遇到了很多问 ...

  8. 在centos7.6上部署.netcore 3.0 web程序

    首先需要一个全新的centos系统. 第一步:按照微软官方文档配置.netcore环境: https://dotnet.microsoft.com/download/linux-package-man ...

  9. 在阿里云centOS7上部署Redis 5.0.5主从 + 哨兵模式

    一.在两台服务器上分别安装.配置Redis 5.0.5 ,为一主一从 安装Redis关键命令: 将安装包上传至:/home 目录下解 压:.tar.gz 安装依赖:yum install gcc 安装 ...

随机推荐

  1. jsp中出现onclick函数提示Cannot return from outside a function or method

    在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(67)-MVC与ECharts

    系列目录 ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Fire ...

  3. 如何利用pt-online-schema-change进行MySQL表的主键变更

    业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键.这种需求在实际生产中还是蛮多的. 下面,看看pt-online-schema-change解决这类问题的处理方式. 首先,创建一张测 ...

  4. ES6之let命令详解

    let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...

  5. NSStringCompareOptions

    typedefNS_OPTIONS(NSUInteger, NSStringCompareOptions) { NSCaseInsensitiveSearch = 1,    //不区分大小写比较 N ...

  6. iOS:以前笔记,未整理版。太多了,先放着吧。。。。。。。

    1. -(void)timetick { _d = 0; NSTimer *newtime =[NSTimer scheduledTimerWithTimeInterval:1 target:self ...

  7. PLSql Oracle配置

    1.安装Oracle客户端或者服务端 2.配置环境变量 <1>.一般如果安装了Oracle客户端或者服务端的话,在环境变种的Path中有Oracle的安装路径(计算机-属性-高级系统设置- ...

  8. Linux命令

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  9. json

    #json序列化,只能处理简单的数据类型,如:字典.列表.字符串,类和函数等数据类型过于复杂,不支持序列化import jsondef sayhi(name): print('hello,', nam ...

  10. MVP初探

    什么是MVP MVP是一种UI的架构模式,是MVC的一种变体,适用于基于事件驱动的应用框架.MVP中的M和V分别对应了MVC中的Model和View,而P代替了Controller,而它更多地体现在了 ...