我相信我已经成功地部署了我的(非常基本的)网站到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
在某种程度上,迁移一定是有效的,因为我的表在那里——但这并不能解释为什么它现在不适合我。
当前回答
来自@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' => '',
),
其他回答
在我的情况下,我没有任何问题,只是忘记启动mysql服务…
sudo service mysqld start
我遇到了同样的问题,我运行的是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', ),
现在只需保存更改,并重新加载页面,它必须工作!
所有这些答案似乎都很沉重……
我刚刚创建了一个。env文件;编辑我的bootstrap/app.php文件,并取消注释下面的行…
(__DIR Dotenv:负载 __.'/../');
希望这对大家有所帮助
由于不同的原因,我遇到了[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 5中,数据库用户名和密码保存在项目目录中的.env文件中,例如。
DB_HOST=127.0.0.1
DB_DATABASE=db1
DB_USERNAME=user1
DB_PASSWORD=pass1
正如你所看到的,这些环境变量覆盖了这里的“forge”字符串,所以改变它们没有任何影响:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
更多信息请访问https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables