我相信我已经成功地部署了我的(非常基本的)网站到fortrabbit,但只要我连接到SSH运行一些命令(如php artisan migrate或php artisan db:seed),我得到一个错误消息:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
在某种程度上,迁移一定是有效的,因为我的表在那里——但这并不能解释为什么它现在不适合我。
我相信我已经成功地部署了我的(非常基本的)网站到fortrabbit,但只要我连接到SSH运行一些命令(如php artisan migrate或php artisan db:seed),我得到一个错误消息:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
在某种程度上,迁移一定是有效的,因为我的表在那里——但这并不能解释为什么它现在不适合我。
当前回答
这发生在我身上是因为MySQL没有运行。MySQL无法启动,因为我丢失了/usr/local/etc/my.cnf.d/目录。
这是我的/usr/local/etc/my.cnf配置文件作为glob include(包括/usr/local/etc/my.cnf.d/*.cnf)所要求的。
运行mkdir /usr/local/etc/my.cnf.d,然后启动MySQL,解决了这个问题。
其他回答
基于@dcarrith的回答…
我没有编辑配置文件,而是在PHP正在查找的位置中创建了一个别名,该别名连接到真正的mysql.sock。(源)
只需运行这两个命令(不需要重新启动):
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
在可能的情况下,我只是简单地使用
vagrant up
而不是
homestead up
为了我的熔炉幼虫装置。我假设这意味着站点正在得到服务,但MySQL服务器从未启动过。当我使用后一个命令启动我的流浪者盒子时,错误消失了。
这是因为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一起工作很好。
错误消息表明尝试通过套接字进行MySQL连接(不支持)。
在Laravel (artisan)环境中,您可能需要使用不同/正确的环境。例如:php artisan migrate——env=生产(或任何环境)。在这里看到的。
如果您正在使用Laravel Homestead,请确保您正在调用服务器上的命令。
homestead ssh
然后简单地cd到正确的目录并在那里发出命令。