我正在为Laravel项目开发,并且我们最近开始与DevOps团队合作,将我们的WebApp提升到登台服务器上。
DevOps团队对Laravel不熟悉,并且不愿意在项目上运行命令行操作以使其启动并运行。在我们的最后一个构建和此构建之间,我们在应用程序/目录中添加了一些新服务,以及供应商/目录中的一些新的第三方库。
如何在不使用Composer Dump-Autolodoad的情况下将这些服务/外墙包括在应用程序/和供应商/文件夹中,以便它们在项目中可用?这是一个合理的解决方案,还是我应该工作/期望说服DevOps他们需要学习从CLI运行作曲家命令?
?谢谢!
您可以在本地计算机上使用FTP(S)或SFTP/SSHF安装目录,然后在该本地目录中运行composer dump-autoload
(或您想运行的任何命令)。/p>
这取决于您的操作系统如何准确地做到这一点。
- Linux,SSH(首选安全):SSHFS
- Linux,FTP:curlftpfs
- Windows,FTP:WebDrive(请参阅https://serverfault.com/q/6079/152253)
但是,是的,他们真的应该习惯自己做。
您的DevOps人是正确的:您不需要在生产机器上运行作曲家。
您必须考虑部署应用程序的过程。这通常意味着您拥有一台要进行连续集成的计算机,因此每个提交都会触发测试套件的执行并报告结果。这样的机器也可以用于进行连续部署,例如在登台机上。
这意味着您拥有一台能够整理构成应用程序的不同组件,以及当所有零件都收集到该位置时,您将所有文件移至登台(和后来的生产)系统。
由于自动化是国王,因此您应该创建一个脚本,该脚本可以执行所需的一切,以进入"完全组装所有需要的文件并完成所有必要的事情"的状态。为什么要脚本?因为这样做可能不仅需要对composer install --no-dev
进行一个调用 - 例如,使用Bower或其他不是作曲家的前端组件可以更好地管理JavaScript。作曲家用于管理PHP代码。
当您拥有该部署脚本时,您的Devops人会更快乐:他们可以通过从存储库中检查应用程序然后运行一个脚本来部署该应用程序。他们不需要在生产机器上安装任何相关的开发(请注意,在安全漏洞的情况下,每个允许在生产机器上开发软件开发的软件对攻击者都非常有用)。
他们需要做的就是复制文件以实时制作新版本。
我们如何在不使用Composer Dump-Autoload的情况下将这些服务/外墙包含在应用程序/和供应商/文件夹中,以便它们在项目中可用?
我将这个问题简化为纯自动加载问题:
调整应用程序的自动加载器,以从其位置加载新添加的类。
这意味着要在作曲家之前将自己的自动加载器添加到Laravel的堆栈中。
Laravel Autoloader Stack
1 IlluminateFoundationAliasLoader::load()
2 YourApplicationLoader::load() <---- load your services & whatnot
3 ComposerAutoloadClassLoader::loadClass()
4 Swift::autoload()
如果作曲家未加载libs,因为未运行dump-autoloader,然后应用程序自动加载器将加载它们。
有关更多信息:http://alanstorm.com/laravel_5_autoloader
是一个合理的解决方案,还是我应该工作/期望说服DevOps他们需要学习从CLI运行作曲家命令?
"新"方法也是在生产机器上运行作曲家。
虽然"老式"方法是将您的应用程序与登台服务器的所有依赖关系打包。换句话说:构建一个部署就绪存档,您可以简单地提取生产。