首页 文章

Zend框架2控制台路由mysql错误

提问于
浏览
2

edit 2 : 我自己修正了,看到了评论 .

我试图通过终端访问我的Zf2应用程序 .

我们的想法是,cron脚本会定期调用应用程序,相应的操作将查找数据库中的内容并在需要时进行更新 .

通过浏览器访问控制器/操作时,一切都很好 .

当通过终端访问它时,我得到一个与mysql相关的错误,我有点迷失它 .

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock)

来自终端的命令是:

php index.php stories update

这是我的路线:

'console' => array(
    'router' => array(
        'routes' => array(
              'updatestories' => array(
                    'options' => array(
                        'route'    => 'stories update',
                        'defaults' => array(
                            'controller' => 'Application\Controller\Index',
                            'action'     => 'updatestories'
                        )
                    )
                )
        )
    )
),

动作'updatestories'是:

public function updatestoriesAction(){

    $request = $this->getRequest();

    // Make sure that we are running in a console and the user has not tricked our
    // application into running this action from a public web server.
    if (!$request instanceof ConsoleRequest){
        throw new \RuntimeException('You can only use this action from a console!');
    }

    $talents = $this->getStoriesTable()->fetchAll();

    var_dump($talents);

    return "end of script. !\n";
}

这是我通过终端到达时出现的错误:

警告:PDO :: __ construct():[2002]在/ Users / gregorychiche / Sites / repos / vendor / zendframework /中没有这样的文件或目录(尝试通过unix:///var/mysql/mysql.sock连接)第281行的zendframework / library / Zend / Db / Adapter / Driver / Pdo / Connection.php ============================== ========================================应用程序抛出异常! ================================================== ==================== Zend \ Db \ Adapter \ Exception \ RuntimeException连接错误:SQLSTATE [HY000] [2002]没有这样的文件或目录------ -------------------------------------------------- -------------- /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php:289 0 / Users / gregorychiche / Sites / repos / vendor / zendframework / zendframework / library / Zend / Db / Adapter / Driver / Pdo / Pdo.php(244):Zend \ Db \ Adapter \ Driver \ Pdo \ Connection-> connect()1 / Users /gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Db/Sql/Sql.php(120):Zend \ Db \ Adapter \ Driver \ Pdo \ Pdo-> createStatement()2 / Users / gregorychiche / Sites / repos / module / Talents / src / Talents / Model / StoriesTable.php(35):Zend \ Db \ Sql \ Sql-> prepareStatementForSqlObject(Object(Zend \ Db \ Sql \ Select))3 / Users / gregorychiche / Sites /repos/module/Application/src/Application/Controller/IndexController.php(123):Talents \ Model \ StoriesTable-> fetchAll ()4 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractActionController.php(83):Application \ Controller \ IndexController-> updatestoriesAction()5 [内部函数]:Zend \ Mvc \ Controller \ AbstractActionController-> onDispatch(Object(Zend \ Mvc \ MvcEvent))6 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(468):call_user_func(数组,对象(Zend \ Mvc \ MvcEvent))7 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207):Zend \ EventManager \ EventManager-> triggerListeners(') dispatch',Object(Zend \ Mvc \ MvcEvent),Object(Closure))8 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractController.php(117):Zend \ EventManager \ EventManager-> trigger('dispatch',Object(Zend \ Mvc \ MvcEvent),Object(Closure))9 / Users / gregorychiche / Sites / repos / vendor / zendframework / zendframework / library / Zen d / Mvc / DispatchListener.php(114):Zend \ Mvc \ Controller \ AbstractController-> dispatch(对象(Zend \ Console \ Request),对象(Zend \ Console \ Response))10 [内部函数]:Zend \ Mvc \ DispatchListener-> onDispatch(Object(Zend \ Mvc \ MvcEvent))11 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(468):call_user_func(Array,Object(Zend) \ Mvc \ MvcEvent))12 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207):Zend \ EventManager \ EventManager-> triggerListeners('dispatch',Object( Zend \ Mvc \ MvcEvent),Object(Closure))13 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php(309):Zend \ EventManager \ EventManager-> trigger( 'dispatch',Object(Zend \ Mvc \ MvcEvent),Object(Closure))14 /Users/gregorychiche/sites/repos/public/index.php(24):Zend \ Mvc \ Application-> run()15 ================================================= ===================== P. revious Exception(s):============================================ ==========================异常'PDOException',消息'SQLSTATE [HY000] [2002] / Users /中没有这样的文件或目录gregorychiche / Sites / repos / vendor / zendframework / zendframework / library / Zend / Db / Adapter / Driver / Pdo / Connection.php:281堆栈跟踪:0 / Users / gregorychiche / Sites / repos / vendor / zendframework / zendframework / library / Zend / Db / Adapter / Driver / Pdo / Connection.php(281):PDO - > __ construct('mysql:dbname = ta ...','root','root',Array)1 / Users / gregorychiche / Sites /repos/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Pdo.php(244):Zend \ Db \ Adapter \ Driver \ Pdo \ Connection-> connect()2 / Users / gregorychiche / Sites / repos / vendor / zendframework / zendframework / library / Zend / Db / Sql / Sql.php(120):Zend \ Db \ Adapter \ Driver \ Pdo \ Pdo-> createStatement()3 / Users / gregorychiche / Sites / repos /module/Talents/src/Talents/Model/StoriesTable.php(35):Zend \ Db \ Sql \ Sql-> prepareStatementForSqlObject(Object(Zend \ Db \ Sql \ Select))4 /Users/gregorychiche/Sites/repos/module/Application/src/Application/Controller/IndexController.php(123):Talents \ Model \ StoriesTable-> fetchAll()5 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractActionController.php(83):Application \ Controller \ IndexController-> updatestoriesAction() 6 [内部函数]:Zend \ Mvc \ Controller \ AbstractActionController-> onDispatch(Object(Zend \ Mvc \ MvcEvent))7 / Users / gregorychiche / Sites / repos / vendor / zendframework / zendframework / library / Zend / EventManager / EventManager . php(468):call_user_func(Array,Object(Zend \ Mvc \ MvcEvent))8 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207):Zend \ EventManager \ EventManager-> triggerListeners('dispatch',Object(Zend \ Mvc \ MvcEvent),Object(Closure))9 / Users / gregorychiche / Sites / repos / vendor / zendframework / zendframework / library / Zend / Mvc / Controller / AbstractController.php(117):Zend \ EventManager \ EventManager-> trigger('dispatch',Object(Zend \ Mvc \ MvcEvent),Object(Closure))10 / Users / gregorychiche / Sites / repos / vendor / zendframework / zendframework / library / Zend / Mvc / DispatchListener.php(114):Zend \ Mvc \ Controller \ AbstractController-> dispatch(Object(Zend \ Console \ Request),Object(Zend \ Console \ Response))11 [内部函数]: Zend \ Mvc \ DispatchListener-> onDispatch(Object(Zend \ Mvc \ MvcEvent))12 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(468):call_user_func(Array ,Object(Zend \ Mvc \ MvcEvent))13 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207):Zend \ EventManager \ EventManager-> triggerListeners('dispatch ',Object(Zend \ Mvc \ MvcEvent),Object(Closure))14 /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php(309):Zend \ EventManager \ EventManager - >触发('DISPA tch',Object(Zend \ Mvc \ MvcEvent),Object(Closure))15 /Users/gregorychiche/sites/repos/public/index.php(24):Zend \ Mvc \ Application-> run()

我错过了什么?我不明白为什么代码在通过浏览器访问时工作(如果我删除了但显然会抛出异常的代码),但在使用终端时却没有 . 我认为zf2正在处理所有依赖 .

提前致谢

edit 1 : getStoriesTable()如下 . 它在浏览器上下文中使用时效果很好

public function getStoriesTable()
{
    if (!$this->storiesTable) {
        $sm = $this->getServiceLocator();
        $this->storiesTable = $sm->get('Talents\Model\StoriesTable');
    }
    return $this->storiesTable;
}

edit 2 : 我自己修正了,看到评论 .

格雷格

1 回答

  • 2

    问题是mysql无法在localhost上运行 .

    在大多数情况下,将 global.php hostname更改为 127.0.0.1

相关问题