我相信我已经成功地部署了我的(非常基本的)网站到fortrabbit,但只要我连接到SSH运行一些命令(如php artisan migrate或php artisan db:seed),我得到一个错误消息:

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory

在某种程度上,迁移一定是有效的,因为我的表在那里——但这并不能解释为什么它现在不适合我。


当前回答

我的答案是针对Laravel的。

在database.php配置文件中创建到本地Docker MySQL服务的新连接并将其设置为默认连接后,我收到了这条消息。我忘记了我通过在模型中覆盖它来设置一个不同的连接:

class Model extends \Illuminate\Database\Eloquent\Model
{
    protected $connection;

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);
        $this->connection = 'some_other_connection';
    }
...

因此,即使我在database.php文件中的默认连接指向正确的凭据,模型仍然使用我从本地环境文件中删除的远程数据库连接配置。

其他回答

我在访问Drupal网站时也遇到了类似的问题。我通过打开命令行,重新启动我的MySQL服务器或服务来修复它:

service mysqld restart

这应该有用。如果没有,重启你的本地web服务器:

service httpd restart

这应该足够了。希望它也适用于其他环境。注意,这些命令通常需要超级用户权限。

在我的情况下,我没有任何问题,只是忘记启动mysql服务…

sudo service mysqld start

由于不同的原因,我遇到了[PDOException] SQLSTATE[HY000] [2002] No这样的文件或目录错误。我刚刚在Ubuntu 12.04上用Apache 2.4.7、PHP v5.5.10和MySQL 5.6.16构建了一个全新的LAMP堆栈。我把我的网站搬了回来,重新启动。但是,我无法加载我的Laravel 4.2。基于x的站点,因为上面的[PDOException]。所以,我检查了php -i | grep pdo,并注意到这一行:

pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

但是,在我的/etc/my.cnf中,sock文件实际上在/var/run/mysqld/mysqld.sock中。

因此,我打开php.ini并设置pdo_mysql.default_socket的值:

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

然后,我重新启动apache并检查php -i | grep pdo:

pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

这为我解决了问题。

如果您正在使用Laravel Homestead,请确保您正在调用服务器上的命令。

homestead ssh

然后简单地cd到正确的目录并在那里发出命令。

在可能的情况下,我只是简单地使用

vagrant up

而不是

homestead up

为了我的熔炉幼虫装置。我假设这意味着站点正在得到服务,但MySQL服务器从未启动过。当我使用后一个命令启动我的流浪者盒子时,错误消失了。