尝试在ZF2项目中使用Redis支持的PHP-Resque项目https://github.com/chrisboulton/php-resque。 (具体要求)
我遇到的麻烦是将ZF2命名空间和类
组合在一起例如:
控制器
//Enqueue a worker
$args = array(
'name' => 'EMCP'
);
Resque::enqueue('default', 'phpresque\\V1\\Model\\MyResqueJob', $args);
MyResqueJob类
namespace phpresque\V1\Model;
class MyResqueJob
{
public function perform()
{
// Work work work
echo "helloWorld";
}
}
resque给出的错误消息:
ubuntu@/zf2projectname/vendor/chrisboulton/php-resque$ QUEUE=* APP_INCLUDE=/zf2projectname/vendor/autoload.php VVERBOSE=1 php resque.php
** [03:01:37 2014-10-26] Sleeping for 5
** [03:01:42 2014-10-26] Checking default
** [03:01:42 2014-10-26] Found job on default
** [03:01:42 2014-10-26] got (Job{default} | ID: 38fa104b11de81731c15ba9c2f1853ab | phpresque\V1\Model\MyResqueJob | [{"name":"EMCP"}])
** [03:01:42 2014-10-26] Forked 30642 at 2014-10-26 03:01:42
** [03:01:42 2014-10-26] Processing default since 2014-10-26 03:01:42
** [03:01:42 2014-10-26] (Job{default} | ID: 38fa104b11de81731c15ba9c2f1853ab | phpresque\V1\Model\MyResqueJob | [{"name":"EMCP"}]) failed: Could not find job class phpresque\V1\Model\MyResqueJob.
** [03:01:42 2014-10-26] Checking default
答案 0 :(得分:0)
编辑:我放弃使用Resque,但下面是关于它如何工作的建议..我最后使用SlmQueue而不是https://github.com/juriansluiman/SlmQueue
根据ZF2 github社区,应该做以下事情:
您的APP_INCLUDE
环境var不应包含作曲家init_autoloader.php
的路径吗?仅包括自动加载器类是不够的,因为您没有在任何地方配置和注册自动加载器。
和
YMMV,但我将ZF2应用程序集成到Resque中所做的就是创建一个单独的入口点脚本,在Resque worker的上下文中初始化ZF2应用程序:
<?php
// resque_context.php
require_once 'vendor/autoload.php';
$application = \Zend\Mvc\Application::init(include 'config/application.config.php');
$config = $application->getServiceManager()->get('config');
通过APP_INCLUDE
环境变量提供Resque运行脚本的路径。