Php 仅部署生成的代码,不部署composer.json文件,并使用;“供应商”;在「;src";目录
我有一个项目,项目的根目录中有所有的Php 仅部署生成的代码,不部署composer.json文件,并使用;“供应商”;在「;src";目录,php,deployment,composer-php,Php,Deployment,Composer Php,我有一个项目,项目的根目录中有所有的composer.json,phpunit.xml,等等 所有.php源代码都位于src/ 我已将composer.json配置如下: { "name" : "myproj", "config" : { "vendor-dir" : "src/vendor" }, "autoload" : { "psr-4" : { "myclasses\\" : "src/classes" } } } 这在我的开发机
composer.json
,phpunit.xml
,等等
所有.php
源代码都位于src/
我已将composer.json配置如下:
{
"name" : "myproj",
"config" : {
"vendor-dir" : "src/vendor"
},
"autoload" : {
"psr-4" : {
"myclasses\\" : "src/classes"
}
}
}
这在我的开发机器上运行得很好
问题是我只想部署src
目录的内容,这样就不会在部署服务器上获取所有项目元数据
不幸的是,自动加载程序在/var/www/test/vendor/composer/../../../../src/classes/
中查找类,而不是在/var/www/test/vendor/composer/../../../classes/
中查找类
PHP警告:include():在第444行的/var/www/test/vendor/composer/ClassLoader.PHP中打开“/var/www/test/vendor/composer/../../../../../../src/classes/myclasses/core/messages/MessageList.PHP”以包含(include_path=':/usr/share/PHP')
我能做一个聪明的配置吗?或者我被迫将
composer.json
(我认为这是生产中不需要的元数据)移动到/src
?运行时从未使用过的composer.json文件中。无论如何,它没有任何用处,它只由composer命令使用。如果未在生产机器中运行composer
,则无需上传它
您的项目失败并不是因为代码中“您没有部署composer.json”,而是因为您正在转储具有特定结构的自动加载器,您实际上在composer.json
配置中提到了该结构,然后尝试使用不同的目录结构运行服务器
运行composer install
和composer dumpautoloader
时,您的项目如下所示:
composer.json
src/如果它是/var/www/test/src/classes
,你就不会真的想要/var/www/test/classes
。src
中的所有内容都在/var/www/test
中,我希望自动加载器跳过/../src
部分“我希望自动加载器跳过/。/src部分”-所以在composer.json文件中更改它?您可以将名称空间“MyClass”指向任何您想要的位置。部署服务器上不需要的“项目元数据”是什么?composer.json文件?您如何部署应用程序?您不能只设置部署脚本来处理正在部署的内容吗?它不是这样工作的,您需要更改composer.json并删除src/
,然后运行composer du
,但很明显,当你有时间的时候,它在本地就不起作用了src@MagnusEriksson我在jenkins服务器上运行composer install
和composer-o dumpautoloader
,然后将其scp到没有composer的目标服务器,等等。ofc我可以始终在部署目录中保留composer.json
,然后删除它,这样它就不在目标服务器上了。我喜欢你的答案,但不能使用它。我必须在无法修改路径的主机(在prod中)上使用它,因此必须部署到某个文件夹。我喜欢元文件(如Jenkinsfile、phpunit.xml、phpmd、.git folder、.gitignore)和未在生产中部署的测试类的对称性。基于这些注释,我将把composer.json
移动到src
文件夹中,然后从部署服务器中删除它。但是您不能用其他任何方法来完成。无论何时生成自动加载器,服务器上的结构都需要与目录结构相匹配。或者,您需要在开发(您的计算机)和构建计算机中使用不同的composer.json文件。这看起来像是在寻找问题。我只是希望,既然我可以定义供应商
文件夹的路径,我就可以更好地控制它的工作方式。问题是,当您运行composer dumpautoload
时,您只有一个配置,然后,您希望在与该配置不匹配的设置中使用生成的自动加载。如果你仔细想想,你就会意识到这是一个有问题的命题。