2

编辑 2:自己修复,见评论。

我正在尝试通过终端访问我的 Zf2 应用程序。

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

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

通过终端访问它时,我遇到了一个与 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'
                        )
                    )
                )
        )
    )
),

行动“更新故事”是:

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/zendframework 中没有这样的文件或目录(试图通过 unix:///var/mysql/mysql.sock 连接) /library/Zend/Db/Adapter/Driver/Pdo/Connection.php 在第 281 行 =============================== ======================================== 应用程序抛出异常!==================================================== ==================== Zend\Db\Adapter\Exception\RuntimeException 连接错误:SQLSTATE[HY000] [2002] 没有这样的文件或目录 ------ -------------------------------------------------- -------------- /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php:

我错过了什么?我不明白为什么代码在通过浏览器访问时有效(如果我删除了该代码,但代码显然会引发异常),但在使用终端时却不行。我认为 zf2 正在处理所有依赖项。

提前致谢

编辑 1: getStoriesTable() 如下。在浏览器上下文中使用时效果很好

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

编辑 2:自己修复,见评论。

格雷格

4

1 回答 1

2

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

在大多数情况下, global.php主机名更改为127.0.0.1

于 2015-03-11T07:09:58.027 回答