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

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

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


当前回答

所有现有的答案都是正确的,可能对你有用。 我的情况有点不同。我在本地使用docker-compose up启动一个docker项目时遇到了这个错误。

对于我的特定情况,问题是我从子文件夹运行docker-compose,而不是从docker-compose文件所在的根文件夹运行。

确保从docker-compose所在的文件夹中运行docker-compose。Yml保存到!

其他回答

如果有人还在寻找答案,只要检查你的。env文件。出于某种原因,laravel创建了一个。env。示例文件,所以所有这些答案都不适合我。我修复了重命名。env的问题。.env的示例

我遇到了同样的问题,我运行的是Mac OS X 10.10 Yosemite。我已经启用了操作系统自带的Apache服务器和PHP。然后,我刚刚配置了mCrypt库开始。在那之后,当我使用模型和DB时,我得到了一个错误:

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

我发现的原因只是因为PHP和MySQL不能自己连接。 为了解决这个问题,我遵循以下步骤:

Open a terminal and connect to the mysql with: mysql -u root -p It will ask you for the related password. Then once you get the mysql promt type the next command: mysql> show variables like '%sock%' You will get something like this: +-----------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------+-----------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 322 | | socket | /tmp/mysql.sock | +-----------------------------------------+-----------------+ Keep the value of the last row: /tmp/mysql.sock In your laravel project folder, look for the database.php file there is where you configure the DB connection parameters. In the mysql section add the next line at the end: 'unix_socket' => '/tmp/mysql.sock' You must have something like this: 'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'SchoolBoard', 'username' => 'root', 'password' => 'venturaa', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'unix_socket' => '/tmp/mysql.sock', ),

现在只需保存更改,并重新加载页面,它必须工作!

这是因为PDO特别对待“localhost”主机:

注意:仅适用于Unix:当主机名设置为"localhost"时,则 到服务器的连接是通过域套接字进行的。如果PDO_MYSQL是 根据libmysqlclient编译后的套接字文件的位置 在libmysqlclient的编译位置。如果编译PDO_MYSQL mysqlnd的默认套接字可以通过 pdo_mysql.default_socket设置。

(来自http://php.net/manual/en/ref.pdo-mysql.connection.php)

将localhost更改为127.0.0.1将“强制”使用TCP。

注意:mysqli_connect与localhost一起工作很好。

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

homestead ssh

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

基于@dcarrith的回答…

我没有编辑配置文件,而是在PHP正在查找的位置中创建了一个别名,该别名连接到真正的mysql.sock。(源)

只需运行这两个命令(不需要重新启动):

mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock