我们使用不同于默认的缓存目录,并使用构建代理进行部署。我们在不存在缓存目录的构建代理上运行composer install,然后将其rsync到web服务器,然后在web服务器上运行命令来清除和预热缓存(所有这些都是从Bamboo部署中完成的)。
当编译器安装在代理上运行时,当然会有一个错误返回到日志中,因为它不能创建缓存目录(我们不希望它在之后这样做)。
是否有任何方法,当我运行作曲家安装我可以让它跳过缓存清除?
您只需要删除以下行:
"Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache",
从composer.json
文件的post-install-cmd
和/或post-update-cmd
部分。
假设您的构建代理正在执行install
,而不是update
,那么将这一行保留在post-update-cmd
部分以进行开发工作可能会很有用。
就像其他人说的那样,SensioBundleDistributionBundleComposerScriptHandler→::installAssets将在需要时进行缓存清除,如果您无法写入缓存将导致问题(我在从构建代理同步到实时服务器时这样做)。
目前我能找到的解决这个问题的唯一方法是从composer.json中删除这两行:
"Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache",
"Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::installAssets",
然后,一旦你在服务器上有你的缓存目录可用,运行以下2个命令(到这个阶段,你应该已经完成了你的composer安装/更新):
php bin/console cache:clear --env=prod --no-debug
php bin/console assets:install --env=prod
assets:install可能需要,也可能不需要,这取决于所安装的供应商包。任何使用"public"文件夹来存储资源的东西都需要这样做,以便正确设置/web/bundles/bundleName的符号链接。在此之后,我还会进行资产转储。
通过这样做,你现在可以在一个单独的服务器上或在不同的目录下做长部分(git克隆和composer安装),然后rsync它到你想要的地方。然后你只需刷新和预热缓存,并做资产/资产的最终配置(或任何你正在做的需要缓存)与最小的停机时间或任何问题,如果你的网站在部署中途出现问题。