在生产中为 Laravel 4.x 项目包含没有 运行 composer dump-autoload 的库
Include library without running composer dump-autoload for a Laravel 4.x project in production
我正在为一个 Laravel 项目开发,我们最近开始与我们的 DevOps 团队合作,将我们的 WebApp 部署到临时服务器上。
DevOps 团队不熟悉 Laravel 并且相当反对 运行ning 项目上的命令行操作来启动它并 运行ning。在上次构建和这次构建之间,我们在 app/ 目录中添加了一些新服务,并在 vendor/ 目录中添加了一些新的第 3 方库。
我们如何在不使用 composer dump-autoload 的情况下将这些 services/facades 包含在 app/ 和 vendor/ 文件夹中,以便它们在项目中可用?这是一个合理的解决方案还是我应该 working/expecting 来说服 DevOps 他们需要从 CLI 学习 运行 composer 命令?
谢谢!
您可以在本地计算机上使用 FTP(S) 或 SFTP / SSHfs 挂载目录,然后 运行 composer dump-autoload
(或您使用的任何命令)我想 运行) 在那个本地目录中。
具体如何操作取决于您的操作系统。
- Linux,SSH(安全性首选):sshfs
- Linux, FTP: curlftpfs
- Windows, FTP: WebDrive (see https://serverfault.com/q/6079/152253)
但是,是的,他们真的应该自己习惯这样做。
How can we include these services/facades in the app/ and vendor/ folders without using composer dump-autoload, so that they are usable in the project?
我将这个问题简化为一个纯粹的自动加载问题:
调整应用程序的自动加载器以从其位置加载新添加的 类。
这意味着将您自己的自动加载器添加到 Laravel 的自动加载器堆栈中 Composer 之前的位置。
Laravel Autoloader Stack
1 Illuminate\Foundation\AliasLoader::load()
2 YourApplicationLoader::load() <---- load your services & whatnot
3 Composer\Autoload\ClassLoader::loadClass()
4 Swift::autoload()
如果库没有被 Composer 加载,因为 dump-autoloader 不是 运行,
然后应用程序自动加载器将加载它们。
更多:http://alanstorm.com/laravel_5_autoloader
Is it a reasonable solution or should I be working/expecting to convince DevOps that they need to learn to run composer commands from the CLI?
"new" 方法也是 运行 生产机器上的 Composer。
虽然 "old-school" 方法是将您的应用程序及其所有依赖项打包到登台服务器上。换句话说:构建一个部署就绪存档,您可以在生产中简单地提取它。
您的 DevOps 人员是对的:您不应该 运行 在生产机器上使用 Composer。
您必须考虑部署应用程序的过程。这通常意味着您有一台旨在进行持续集成的机器,因此每次提交都会触发测试套件的执行并报告结果。这样的机器也可以用来做持续部署,例如到临时机器。
这意味着您拥有一台能够将构成您的应用程序的所有不同组件组合在一起的机器,当所有部件都收集到该位置后,您将所有文件移至登台(和以后的生产)系统。
因为自动化为王,您应该创建一个脚本来完成进入 "completely assembled all needed files and done all necessary stuff" 状态所需的一切。为什么要脚本?因为做这些事情可能不仅需要调用 composer install --no-dev
- 例如,使用 Bower 或非 Composer 的东西可以更好地管理像 Javascript 这样的前端组件。 Composer 用于管理 PHP 代码。
当您拥有该部署脚本时,您的 DevOps 人员会更开心:他们可以通过从存储库中检出应用程序来部署应用程序,然后 运行创建一个脚本。他们不需要在生产机器上安装任何与开发相关的东西(请注意,每个允许在生产机器上进行软件开发的软件都对攻击者非常有用,以防出现安全漏洞)。
然后他们需要做的就是复制文件以使新版本上线。
我正在为一个 Laravel 项目开发,我们最近开始与我们的 DevOps 团队合作,将我们的 WebApp 部署到临时服务器上。
DevOps 团队不熟悉 Laravel 并且相当反对 运行ning 项目上的命令行操作来启动它并 运行ning。在上次构建和这次构建之间,我们在 app/ 目录中添加了一些新服务,并在 vendor/ 目录中添加了一些新的第 3 方库。
我们如何在不使用 composer dump-autoload 的情况下将这些 services/facades 包含在 app/ 和 vendor/ 文件夹中,以便它们在项目中可用?这是一个合理的解决方案还是我应该 working/expecting 来说服 DevOps 他们需要从 CLI 学习 运行 composer 命令?
谢谢!
您可以在本地计算机上使用 FTP(S) 或 SFTP / SSHfs 挂载目录,然后 运行 composer dump-autoload
(或您使用的任何命令)我想 运行) 在那个本地目录中。
具体如何操作取决于您的操作系统。
- Linux,SSH(安全性首选):sshfs
- Linux, FTP: curlftpfs
- Windows, FTP: WebDrive (see https://serverfault.com/q/6079/152253)
但是,是的,他们真的应该自己习惯这样做。
How can we include these services/facades in the app/ and vendor/ folders without using composer dump-autoload, so that they are usable in the project?
我将这个问题简化为一个纯粹的自动加载问题:
调整应用程序的自动加载器以从其位置加载新添加的 类。
这意味着将您自己的自动加载器添加到 Laravel 的自动加载器堆栈中 Composer 之前的位置。
Laravel Autoloader Stack
1 Illuminate\Foundation\AliasLoader::load()
2 YourApplicationLoader::load() <---- load your services & whatnot
3 Composer\Autoload\ClassLoader::loadClass()
4 Swift::autoload()
如果库没有被 Composer 加载,因为 dump-autoloader 不是 运行, 然后应用程序自动加载器将加载它们。
更多:http://alanstorm.com/laravel_5_autoloader
Is it a reasonable solution or should I be working/expecting to convince DevOps that they need to learn to run composer commands from the CLI?
"new" 方法也是 运行 生产机器上的 Composer。
虽然 "old-school" 方法是将您的应用程序及其所有依赖项打包到登台服务器上。换句话说:构建一个部署就绪存档,您可以在生产中简单地提取它。
您的 DevOps 人员是对的:您不应该 运行 在生产机器上使用 Composer。
您必须考虑部署应用程序的过程。这通常意味着您有一台旨在进行持续集成的机器,因此每次提交都会触发测试套件的执行并报告结果。这样的机器也可以用来做持续部署,例如到临时机器。
这意味着您拥有一台能够将构成您的应用程序的所有不同组件组合在一起的机器,当所有部件都收集到该位置后,您将所有文件移至登台(和以后的生产)系统。
因为自动化为王,您应该创建一个脚本来完成进入 "completely assembled all needed files and done all necessary stuff" 状态所需的一切。为什么要脚本?因为做这些事情可能不仅需要调用 composer install --no-dev
- 例如,使用 Bower 或非 Composer 的东西可以更好地管理像 Javascript 这样的前端组件。 Composer 用于管理 PHP 代码。
当您拥有该部署脚本时,您的 DevOps 人员会更开心:他们可以通过从存储库中检出应用程序来部署应用程序,然后 运行创建一个脚本。他们不需要在生产机器上安装任何与开发相关的东西(请注意,每个允许在生产机器上进行软件开发的软件都对攻击者非常有用,以防出现安全漏洞)。
然后他们需要做的就是复制文件以使新版本上线。