编辑2:我自己修复了它,请参阅评论。
我正在尝试通过终端访问我的 Zf2 应用程序。
这个想法是,cron 脚本将定期调用应用程序,相应的操作将在数据库中查找内容并在需要时进行更新。
通过浏览器访问 Controller /操作时,一切正常。
当通过终端访问它时,我收到了一个与 mysql 相关的错误,我有点迷失了。
警告:PDO::__construct(): [2002] 没有这样的文件或目录(尝试通过 unix:///var/mysql/mysql.sock 连接)
来自终端的命令是:
php index.php 故事更新
这是我的路线:
'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";
}
这是我仅在通过终端到达它时收到的错误:
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php on line 281 ====================================================================== The application has thrown an exception! ====================================================================== Zend\Db\Adapter\Exception\RuntimeException Connect Error: SQLSTATE[HY000] [2002] No such file or directory ---------------------------------------------------------------------- /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 [internal function]: 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(Array, Object(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/Zend/Mvc/DispatchListener.php(114): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Console\Request), Object(Zend\Console\Response)) 10 [internal function]: 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 {main} ====================================================================== Previous Exception(s): ====================================================================== exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory' in /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php:281 Stack trace: 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 [internal function]: 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 [internal function]: 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->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 15 /Users/gregorychiche/sites/repos/public/index.php(24): Zend\Mvc\Application->run()
我错过了什么?我不明白为什么代码在通过浏览器访问时可以工作(如果我删除该代码但显然会引发异常),但在使用终端时却不能。我认为 zf2 正在处理所有依赖性。
提前致谢
编辑1: getStoriesTable() 如下。在浏览器上下文中使用时效果非常好
public function getStoriesTable()
{
if (!$this->storiesTable) {
$sm = $this->getServiceLocator();
$this->storiesTable = $sm->get('Talents\Model\StoriesTable');
}
return $this->storiesTable;
}
编辑2:我自己修复了它,请参阅评论。
格雷格
最佳答案
问题是 mysql 无法在本地主机上运行。
在大多数情况下,将 global.php
主机名更改为 127.0.0.1
关于mysql - Zend框架2控制台路由mysql错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003044/