首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AWS S3上存储多个应用程序的CakePHP库

在AWS S3上存储多个应用程序的CakePHP库
EN

Stack Overflow用户
提问于 2017-12-19 22:55:22
回答 2查看 264关注 0票数 2

我只是想到,与其将CakePHP库与我在AWS中运行的不同应用程序的应用程序源代码一起包括在内,不如将该核心库移到AWS S3存储区,并在PHP中打开allow_url_include之后将其包括在内。在这里读到这个答案- 在PHP中包括一个远程文件,我听说这是一个不好的做法,但如果它是用于加载非敏感数据,这是否仍然适用?

还有人做过这种安排吗?我提出这个问题的唯一原因是,我有大约5-6个CakePHP应用程序都在运行同一个库,而且每次进行部署时都会发现上传它很麻烦。实际的应用程序特定代码大约是3-4 MB,但是在库中它会增加到13 MB,我每次都需要上传它。

任何其他能够取得同样结果的建议也将受到极大的赞赏。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-22 03:23:45

我想,我最关心的是,每次对应用程序进行更改时,我都必须不断地将软件包上传到库中,因为我知道,负责上传软件包总规模的80%-90%的库本身从未改变过。这就是为什么我想知道是否有一种方法可以将这个库加载到我在云中的最终应用程序中,而不必实际上传它。

因此,一开始,我考虑是否可以将库存储在S3中并从那里加载。但正如@Dan所指出的,这将意味着应用程序必须装载每个请求,这肯定不是正确的方法。

最后,在做了一些研究,并与作曲家的手,我能够实现我想要做的。如果将配置显示在正在上载的应用程序包的根文件夹中,AWS将使用composer自动加载依赖项。由于我可以将库与其他依赖项一起添加到应用程序中,而且AWS将在部署时运行依赖下载,这意味着我的应用程序包很轻,只包含特定于域的代码。所以我最后的composer.json文件是-

代码语言:javascript
复制
{
    "require": {
        "cakephp/cakephp": "2.10.*",
        "aws/aws-sdk-php": "2.*",
        "stripe/stripe-php": "^5.8",
        "facebook/graph-sdk": "^5.6"
    },
    "config": {
        "vendor-dir": "./app/Vendor/"
    }
}

就我的应用程序代码而言,我唯一需要更改的是蛋糕库的位置。由于我已经将编写器配置为将依赖项加载到app/Vendor文件夹中,所以必须更改app/webroot中index.php文件中的库路径。

但令人惊讶的是,CakePHP的作者们已经准备好了这一点。当库与app文件夹内联时,默认情况下会使用路径的初始声明。只是需要评论一下-见下文-

代码语言:javascript
复制
/**
* The absolute path to the "cake" directory, WITHOUT a trailing DS.
*
* Un-comment this line to specify a fixed path to CakePHP.
* This should point at the directory containing `Cake`.
*
* For ease of development CakePHP uses PHP's include_path. If you
* cannot modify your include_path set this value.
*
* Leaving this constant undefined will result in it being defined in Cake/bootstrap.php
*
* The following line differs from its sibling
* /lib/Cake/Console/Templates/skel/webroot/index.php
*/
//define('CAKE_CORE_INCLUDE_PATH', ROOT .DS. 'lib'); <-- Comment this line out

接下来的几行将将库路径设置为composer将下载相同路径的路径-

代码语言:javascript
复制
/**
* This auto-detects CakePHP as a composer installed library.
* You may remove this if you are not planning to use composer (not recommended, though).
*/
$vendorPath = ROOT . DS . APP_DIR . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib';
$dispatcher = 'Cake' . DS . 'Console' . DS . 'ShellDispatcher.php';
if (!defined('CAKE_CORE_INCLUDE_PATH') && file_exists($vendorPath . DS . $dispatcher)) {
    define('CAKE_CORE_INCLUDE_PATH', $vendorPath);
}

这就是我如何节省每次上传7.2MB到2.6MB的方式,对于低上传速度的互联网连接来说,这意味着上传具有相同输出的新应用程序版本所需的时间有了改进。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-12-19 23:35:02

使用Jenkins或CodePipeline自动生成和部署。在构建时,包含所有代码依赖项并构建部署包,然后使用CodeDeploy部署包。每个应用程序将遵循相同的部署过程。

这是一个非常标准的方法,用于部署具有外部依赖关系的web应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47896390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档