我相信我已经成功地部署了我的(非常基本的)网站到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
在某种程度上,迁移一定是有效的,因为我的表在那里——但这并不能解释为什么它现在不适合我。
当前回答
所有现有的答案都是正确的,可能对你有用。 我的情况有点不同。我在本地使用docker-compose up启动一个docker项目时遇到了这个错误。
对于我的特定情况,问题是我从子文件夹运行docker-compose,而不是从docker-compose文件所在的根文件夹运行。
确保从docker-compose所在的文件夹中运行docker-compose。Yml保存到!
其他回答
如果你使用Laravel Homestead, 这里是设置
(包括流浪者-虚拟机)
.bash-profile
alias vm="ssh vagrant@127.0.0.1 -p 2222"
database.php
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'database' => env('DB_DATABASE', 'homestead'),
'username' => env('DB_USERNAME', 'homestead'),
'password' => env('DB_PASSWORD', 'secret'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
终端
vm
vagrant@homestead:~/Code/projectFolder php artisan migrate:install
这是因为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一起工作很好。
我在docker_compose中使用Docker和MySQL服务名db时遇到了同样的问题。yml文件:
我在.env文件中添加了以下内容:
DB_HOST=db
您还应该确保可以从PHP应用程序中发现您的主机。
这是因为PHP没有弄清楚使用哪个主机来连接。
来自@stuyam的回答为我解决了“没有这样的文件或目录”的问题
简单回答:将/app/config/database.php文件中的“host”从“localhost”更改为“127.0.0.1”
但随后出现了“拒绝连接”错误。如果有人有同样的问题,我的解决方案是更新app/config/local/database.php文件,使端口为8889:
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => '8889',
'database' => 'databaseName',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
如果您正在使用Laravel Homestead,请确保您正在调用服务器上的命令。
homestead ssh
然后简单地cd到正确的目录并在那里发出命令。