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

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

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


当前回答

我只是在。env文件中做了一个更改

我有如下一行代码。

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=

修改主机名localhost为127.0.0.1

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=

这是在我的情况下工作,因为它不能找到任何主机名,如localhost

并在更改主机名后编写以下命令

php artisan config:clear
php artisan migrate:install
php artisan migrate

其他回答

由于不同的原因,我遇到了[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

这为我解决了问题。

在我的情况下,我不得不删除引导/缓存文件夹,然后再试一次。

我的场景是在服务器迁移之后。

步骤1

找到你的unix_socket的路径,只需运行netstat -ln | grep mysql

你应该得到这样的东西

unix  2      [ ACC ]     STREAM     LISTENING     17397    /var/run/mysqld/mysqld.sock

步骤2

将其添加到unix_socket参数中

'mysql' => array(
            'driver'    => 'mysql',
            'host'      => '67.25.71.187',
            'database'  => 'dbname',
            'username'  => 'username',
            'password'  => '***',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'unix_socket'    => '/var/run/mysqld/mysqld.sock' <-----
            ),
        ),

希望能有所帮助!!

错误消息表明尝试通过套接字进行MySQL连接(不支持)。

在Laravel (artisan)环境中,您可能需要使用不同/正确的环境。例如:php artisan migrate——env=生产(或任何环境)。在这里看到的。

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

homestead ssh

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