Deployer v4.2.1致命错误“未定义的功能”与正式认可的第三方食谱开箱即用

时间:2017-02-13 17:25:43

标签: laravel namespaces php-deployer

在PHP部署者v4.2.1的基本安装之后,我发现它不起作用(见下文),正式认可的第三方食谱开箱即用。我是Deployer的新手。这就是我所做的。

我安装了PHP部署者v4.2.1:

composer require --dev deployer/deployer
composer require --dev deployer/recipes

当然,我运行了dep init来设置基本的deploy.php文件。

在我的deploy.php中,我在顶部添加了以下内容:

namespace Deployer;

require 'recipe/laravel.php';
require 'vendor/deployer/recipes/local.php';
require 'vendor/deployer/recipes/rsync.php';
require 'vendor/deployer/recipes/npm.php';
require 'vendor/deployer/recipes/cachetool.php';

然后我设置了我的git存储库,服务器信息等。我的最终deploy任务运行local:prepare命令,这就是它出现奇怪错误的地方:

PHP Fatal error:  Uncaught Error: Call to undefined function Deployer\desc() in /home/vagrant/Code/MyProject/vendor/deployer/recipes/local.php:76

显然存在一些命名空间问题。

不知何故,我发现如果我制作第三方配方文件的本地副本(在供应商目录之外),我可以解决这个问题,然后修改它们,以便desc(...)的调用跟随{{1}像task(...)一样。这有效,但现在我遇到了其他问题,我觉得我走错了路。我觉得这对于基本上是全新的安装来说是一个不可接受的工作。与Deployer捆绑在一起的task(...)->desc(...)食谱单独调用laravel.php,而不是desc(...)之后,所以在我看来,第三方食谱应该能够处理它,但它们会抛出一个错误。 (即使在顶部声明了task(...)->desc(...),或者也许是因为它。)

还有其他人遇到过这个问题吗?是否有一些简单的我忘记添加到namespace Deployer;所以我不必修改供应商文件?

1 个答案:

答案 0 :(得分:2)

(这里要回答我自己的问题......)

我有一个全球安装的dep版本3.3.0(手动安装,没有编写器),这是我每次键入dep时运行的文件,而不是更新的本地安装项目版本dep。所以它试图用3.3.0部署者运行4.2.1配方。

<强>解决方案:

从命令行运行:

php vendor/bin/dep deploy [server]

而不是:

dep deploy [server]