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 回答
问题是mysql无法在localhost上运行 .
在大多数情况下,将
global.php
hostname更改为127.0.0.1