loadsys/ /skeleton
Loadsys CakePHP 3.x 应用程序骨架
Requires
- php: >=5.6.0
- cakephp/cakephp: ~3.1
- cakephp/plugin-installer: *
Requires (Dev)
- dev-master
- 3.3.1
- 3.3.0
- 3.2.0
- 3.1.6
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- dev-rollup
- dev-cakephp-app
- dev-f/app-update-3.3.6
- dev-cake-2.x
- dev-e/variable-replacement
- dev-e/aws-scripted-provisioning
- dev-f/provisioning-rollup
- dev-f/vendor-language-stats
- dev-f/grunt-improvements
This package is not auto-updated.
Last update: 2024-09-13 12:30:03 UTC
README
为使用 CakePHP 3.x 创建应用程序的骨架。(如果您正在寻找 2.x 兼容版本,请查看 cake-2.x 分支。)
此骨架针对 Loadsys 的最常见需求进行了优化。如果您自己找到这个骨架,它可能比您需要的更多或正好符合您的需求。您可以自由选择任何有用的想法。
❕ 这是骨架的 README!要编辑新项目捆绑的 README,请参阅 README.md.template
。
使用骨架的要求
要在开发机器上使用骨架创建新项目,以下工具必须安装
- composer(所有说明假定您可以通过
composer
全局访问它。) - git
请参阅 README.md.template 以获取使用此骨架创建项目所需的系统要求。
骨架使用方法
骨架的 3.x 版本利用了 composer 的 create-project
命令。将使用此存储库作为基础为您创建一个新项目。在过程中将执行安装后脚本以适当地转换克隆的文件。
$ composer self-update # Generally a good idea to run first. $ composer create-project --prefer-dist --ignore-platform-reqs loadsys/skeleton local/path/for/new/project ~3.2 # (Answer wizard questions.) $ cd local/path/for/new/project $ ./bootstrap.sh vagrant
在 vagrant 配置完成之后,虚拟机将在 http://localhost:8080 上可用。
或者,您可以编辑系统中的 hosts
文件,以包含 config/provision.yaml
文件中列出的虚拟机的 IP 地址和主机名。完成后的机器的 web 服务器将对解析为该 IP 地址的任何域名做出响应。如果您使用 vagrant-hostmanager 插件,这将为您完成。
您应该能够访问新应用程序的主页并看到设置“交通灯”为绿色。
贡献
如果您想为此项目做出贡献,请针对正确的分支打开一个拉取请求;3.x 骨架针对 master
分支,2.x 骨架针对 cake-2.x
分支。
测试骨架可能很困难,因为在正常情况下,开发人员必须提交他们的实验性更改,将更改推送到 Github,将更改合并到 master 中(可选)并为 packagist.org 标记新版本以进行“发布”。由于在处理新且未测试的内容时这是一种糟糕的情况,因此能够运行使用本地检查出的骨架存储库的 create-project
命令将非常不错。
为了实现这一点,需要“欺骗” composer 使用本地副本,这需要精心制作的 packages.json
文件。为了简化此过程,骨架中包含了一个 skel/test-project.sh [branch-name] [dest/dir]
脚本。
因此,要测试对骨架的更改
- 克隆骨架存储库。
- 检出新的主题分支。
- 进行更改并提交它们。(此方法的一个局限性是更改必须可以从 git 索引中获取。)
- 运行此命令:
./skel/test-project.sh my-branch-name /new/app/dir
- 新项目将在
/new/app/dir
中设置,并且可以根据需要进行测试。
SemVer
因为这个仓库通过Packagist使用,所以它维护语义版本。在cake-2.x
分支上的2.*
系列可以用来使用旧的skelbin/spawn
方法创建新项目。3.*
系列跟踪master
,并打算与composer create-project
一起使用。你应该始终
使用版本指定符与create-project
命令一起使用,以确保你使用的是这个骨架的完全稳定的版本。原始的master
分支可能包含已合并但“未发布”的新功能,这些功能可能不稳定或尚未准备好在全新的项目中使用。
模板
作为create-project
过程的一部分,将执行一个composer后安装脚本,该脚本会扫描新项目中的*.template
文件,然后在它们内部扫描{{TOKEN}}
。然后提示运行create-project
命令的开发者输入每个令牌的值,并将这些值写入重命名的文件。
例如,如果README.md.template
包含一个{{GIT_CLONE_URL}}
令牌,开发者在设置期间将被提示输入一个值,例如git@github.com:myself/super-project.git
该值将写回README.md.template
,并替换任何现有的README.md
文件。
换句话说:这个仓库使用README.md和composer.json,但你的生成的项目
将使用填写后的README.md.template和composer.json.template的副本。所以如果你想更改新项目中默认的composer包,你需要编辑composer.json.template
。
当在骨架的模板上工作时,查看当前正在使用的令牌列表可能会有所帮助。这可以通过在命令行中使用grep
很容易地完成。
-
grep -norE --include "*.template" '{{([A-Z0-9_]+):?([^}]*)?}}' .
- 列出所有令牌及其默认值,包括文件和行号,但可能包括文件之间的重复项。这有助于查看在哪里使用。 -
grep -horE --include "*.template" '{{([A-Z0-9_]+):?([^}]*)?}}' . | sort | uniq
- 列出所有令牌及其默认值,无重复项,无文件或行号。这有助于审查“简化”的令牌和默认值列表,以查看是否可以进一步合并。
后安装脚本
create-project
命令背后的大部分魔法在于composer能够在新项目中执行PHP脚本。这些脚本通常位于skel/src/
中,并连接到composer.json:scripts:post-create-project-cmd
数组。在设置期间执行的任务包括
- 在所有
*.template
文件中替换{{TOKEN}}
,并将文件重命名为不带.template.
的文件,包括config/app.php.template
。 - 将随机安全盐写入新的
config/app.php
。 - @TODO:如果可用,从Shell Scripts仓库运行
bin/deps-install
命令,以安装node、git子模块和/或PEAR依赖项。 - @TODO:提示用户提交和推送项目。
应该将附加的首次设置添加为后安装脚本。如果某个过程应该可重复,请考虑将其作为loadsys/CakePHP-Shell-Scripts仓库的一部分,并通过后安装钩子调用该脚本。
运行测试
composer脚本有自己的单元测试。要执行它们,请运行
$ composer install $ bin/phpunit --configuration skel/tests/phpunit.xml.dist $ open tmp/coverage/skel/html/index.html
与CakePHP App保持同步
定期拉取cakephp/app
更改是个好主意。你可以通过创建补丁并将其应用到骨架上来做这件事。你需要知道<previous-tag>
和<desired-tag>
(使用最新的cakephp/app发布)。
确定<previous-tag>
运行,并找到app-update-
之后的标签
git log -1 --oneline --grep="app-update"
生成补丁
cd path/to/cakephp/app
git fetch
git format-patch <previous-tag>..<desired-tag> --stdout > app.patch
将补丁应用到新的分支 f/app-update-<desired-tag>
中,并将其合并到 cakephp-app
分支。
cd path/to/loadsys/CakePHP-Skeleton
git fetch
cp path/to/cakephp/app/app.patch path/to/loadsys/CakePHP-Skeleton/
git checkout cakephp-app
git checkout -b f/app-update-<desired-tag>
git apply --stat app.patch
git apply --check app.patch
git am --ignore-whitespace --signoff < app.patch
git checkout cakephp-app
git tag -f cakephp-app-previous
git merge f/app-update-3.0.2 --no-ff
git push origin cakephp-app
接下来,可以将它重新建立在 origin/master
上,并解决任何冲突。
git rebase --onto origin/master cakephp-app-previous f/app-update-<desired-tag>
git push origin f/app-update-<desired-tag>
现在,创建一个 PR 并合并它。
捆绑配置
默认情况下,由这个骨架创建的 Cake 3 项目将是 环境感知的。这种配置方法允许 Cake 应用在多个环境中工作而无需太多麻烦,但 创建 这些环境的持续性问题仍然存在。
我们曾经使用 PuPHPet 来处理这个问题的 Vagrant 部分,但我们厌倦了在每个项目中包含成千上万的文件,而通常我们并不需要这些文件。同时,在 AWS 或专用的生产服务器上进行“裸机”安装时,也很难使用 PuPHPet 的资源,这进一步减少了其效用。
因此,我们用非常精简、轻量级的 shell 脚本替换了它。以下是它们的工作方式
“三台机器”
在我们的典型配置中,需要考虑三台不同的计算机。
- 开发者的工作站,通常是一台 Mac 笔记本电脑,它需要能够将代码推送到/从源代码控制(git)中提取,并运行开发工具,如代码编辑器、网页浏览器和项目的虚拟化托管环境副本(vagrant)。
- 开发者运行的项目副本,通常是 vagrant 虚拟机,它维护应用程序自身的托管环境,包括所有必要的资源(PHP、composer、Apache、MySQL、Memcached、文件存储)。
- 客户的运行副本(或多个副本)的应用程序,通常作为专用的物理服务器或云实例实现,它们也必须维护适当的托管环境,尽管可能分布在不同的资源上(EC2 网络实例 + ElastiCache 缓存 + RDS 数据库(s)+ S3 文件存储)。
为了节约开发资源并将这些环境尽可能统一,这个骨架捆绑了配置脚本,使设置过程可重复,并自动记录所需的步骤。此过程的执行顺序很重要,如下所述。
项目启动
当使用 composer create-project
首次创建新项目时,它将从开发者的“自然”环境(通常是 Mac OS X)执行。此步骤的要求是 git
、php
和 composer
。在此步骤中,该存储库中的文件将被复制到新的目录,并执行 composer install
以及任何 composer PostInstall 钩子脚本。
然而,新创建的目录尚未 完全 初始化,因此必要的步骤被编码到 bootstrap.sh
脚本中。此脚本通过调用 git init
(如果需要)确保新的项目文件夹是一个 git 仓库,确保已执行 composer update
,然后启动“配置”过程。对于开发者的 Mac,这意味着设置 vagrant 虚拟机,因此脚本调用 vagrant up
,它本身在 VM 中执行 provision/main.sh vagrant
以准备它。
其他开发者
bootstrap.sh
脚本具有双重用途。如前所述,对于新创建的项目,它准备将一切提交到 git 并推送到新的远程服务器。
对于另一个新克隆现有项目的开发者(“第二次运行”),它为与项目一起工作准备环境,并再次运行 vagrant up
以初始化虚拟机。开发者只需在其机器上具备 git
、php
、composer
和 vagrant
作为先决条件。
部署
为了处理第三种机器情况,即“裸机”环境,git
是唯一的前提条件,以便克隆仓库并运行bootstrap.sh
。引导程序会为您启动provision/main.sh YOUR_APP_ENV_VALUE
。
结论
总的来说,这使我们能够
- 重复使用
bootstrap.sh
脚本来- 完成首次运行的初始化新分支项目。
- 处理开发者第二次运行的情况,并为项目虚拟机准备使用。
- 处理第二次运行的情况,为新托管环境(如预发布和产品环境)准备,使机器能够直接托管应用程序。
- 重复使用
provision/*.sh
脚本以安装和配置所有环境。
待办事项
- 在项目中搜索
@TODO
标记。这应该会揭示任何必要的额外配置。