내가 염려하는 점은 응용 프로그램을 변경할 때마다 내 소프트웨어 패키지를 계속 업로드해야한다는 것입니다. 전체 응용 프로그램의 80-90 % 업로드 패키지의 크기가 절대로 바뀌지 않았습니다. 그래서 실제로 업로드하지 않고도 클라우드의 최종 응용 프로그램에이 라이브러리를로드 할 수있는 방법이 있는지 알고 싶었습니다.
그래서 처음에는 S3에 라이브러리를 저장하고 거기에서로드 할 수 있는지 생각해 보았습니다. 그러나 @Dan Farrell이 지적했듯이, 응용 프로그램이 모든 요청과 함께 라이브러리를로드해야한다는 것을 의미합니다. 이는 확실히 올바른 방법이 아닙니다.
결국 Composer로 연구하고 손을 뻗어서 내가하고 싶은 것을 성취 할 수있었습니다. AWS는 업로드되는 응용 프로그램 패키지의 루트 폴더에 해당 구성이있는 경우 작곡가를 사용하여 자동으로 의존성을로드합니다. 라이브러리를 다른 종속성과 함께 응용 프로그램에 대한 종속성으로 추가 할 수 있었고 AWS는 배포시 종속성 다운로드를 실행하므로 응용 프로그램 패키지가 가볍고 내 도메인 전용 코드 만 포함한다는 것을 의미했습니다.
내 응용 프로그램 코드의 관점에서
{
"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/"
}
}
, 나는 변경하는 데 필요한 유일한 것은이 케이크 도서관의 위치가 있었다 - 같은 내 최종 composer.json 파일이었다. App/Vendor 폴더에 의존성을로드하도록 컴포저를 구성 했으므로 app/webroot의 index.php 파일에서 라이브러리 경로를 변경해야했습니다.
그러나 놀랍게도, CakePHP 제작자는 이미 이것을 제공했습니다. 라이브러리가 app 폴더와 인라인 될 때 기본적으로 사용되는 경로의 초기 선언이 있습니다.그건 그냥 주석 처리 할 필요가 - 아래를 참조 -
은
/**
* 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
작곡가가 같은 다운로드했을 경로에 라이브러리 경로를 설정합니다 라인의 다음 몇 -
/**
* 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);
}
그리고는 내가 방법 업로드 속도가 느린 인터넷 연결의 경우 2.6MB로 매번 7.2MB를 업로드해야하는 번거 로움이 없으므로 동일한 출력으로 새 응용 프로그램 버전을 업로드하는 데 필요한 시간이 향상되었습니다.
희망이 도움이됩니다.
빌드 할 때 앱과의 종속성을 묶는 것이 현명한 방법입니다. 런타임이 아니라 런타임을 배치하십시오. 물론 모든 요청에 아닙니다. 불편한 경우 빌드를 자동화하십시오. 공유 종속성은 버전별로 긴 기간 동안 안정적으로 작동해야합니다. 대신 통합 된 빌드 프로세스를 작성하십시오. 그런 다음 종속성을 기회 주의적으로 캐시하면 두 가지 장점 모두를 얻을 수 있습니다. –