缘起

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. Ubuntu 16.10 安装byzanz截取动态效果图工具

    1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...

  2. ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求

    通过调用ApplicationBuilder的扩展方法UseStaticFiles注册的StaticFileMiddleware中间件帮助我们处理针对文件的请求.对于StaticFileMiddlew ...

  3. WebAPi之SelfHost自创建证书启动Https疑难解惑及无法正确返回结果

    前言 话说又来需求了,之前对于在SelfHost中需要嵌套页面并操作为非正常需求,这回来正常需求了,客户端现在加了https,老大过来说WebAPi访问不了了,这是什么情况,我去试了试,还真是这个情况 ...

  4. SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

    前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能,简短的内容,深入的理解,Always to review the basics. ...

  5. JavaScript特性(attribute)、属性(property)和样式(style)

    最近在研读一本巨著<JavaScript忍者秘籍>,里面有一篇文章提到了这3个概念. 书中的源码可以在此下载.我将源码放到了线上,如果不想下载,可以直接访问在线网址,修改页面名就能访问到相 ...

  6. Twproject Gantt开源甘特图功能扩展

    1.Twproject Gantt甘特图介绍 Twproject Gantt 是一款基于 jQuery 开发的甘特图组件,也可以创建其它图表,例如任务树(Task Trees).内置编辑.缩放和 CS ...

  7. 我理解的MVC

    前言 前一阶段对MVC模式及其衍生模式做了一番比较深入的研究和实践,这篇文章也算是一个阶段性的回顾和总结. 经典MVC模式 经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的 ...

  8. Quartz2D总结

    天了噜,脑子完全懵了,最起码说出来个上下文啊,连这个都给忘了,特此总结一下,并以此缅怀这次面试 Quartz2D的API来自于Core Graphics(这就是为什么CGContextRef是以CG开 ...

  9. Atitit.软件开发的三层结构isv金字塔模型

    Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...

  10. jquery.multiselect 多选下拉框实现

    第一步:链接下列文件,如果没有,到此网页下载 https://github.com/ehynds/jquery-ui-multiselect-widget,此插件基于jquery ,所以jquery的 ...