Laravel 环境配置未加载,迁移失败 - SQLSTATE[HY000] [2002] No such file or directory

Posted

技术标签:

【中文标题】Laravel 环境配置未加载,迁移失败 - SQLSTATE[HY000] [2002] No such file or directory【英文标题】:Laravel environment config not loading, migration fails - SQLSTATE[HY000] [2002] No such file or directory 【发布时间】:2015-04-22 12:14:16 【问题描述】:

我的 app/config/database.php 设置如下:

'mysql' => array(
    'driver'    => 'mysql',
    'host'      => getenv('DB_HOST'),
    'database'  => getenv('DB_NAME'),
    'username'  => getenv('DB_USER'),
    'password'  => getenv('DB_PASS'),
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

我在 bootstrap/start.php 中更新了我的 env 检测代码:

$env = $app->detectEnvironment(function() 
    return file_exists(dirname(__FILE__) . '/../.env.production.php')
        ?
        'production'
        :
        'local';
);

现在,我已经上传了 .env.production.php,其中包含以下内容:

<?php

return
[
    'DB_HOST' => '178.xxx.xxx.xxx',
    'DB_NAME' => 'USERNAME',
    'DB_USER' => 'PASSWORD',
    'DB_PASS' => 'DBNAME',
];

我这样测试环境检测:

[www-data@server]$ php artisan env
Current application environment: production

如您所见,它按预期工作。然后我开始像这样运行迁移:

php artisan 迁移:安装

当我这样做时,我收到以下错误:

[www-data@server]$ php artisan migrate:install --env=production

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

migrate:install [--database[="..."]]

知道为什么会这样吗?看起来它无法加载 .env.production.php 文件。

有谁知道如何解决这个错误?提前致谢。

【问题讨论】:

这听起来像是无法连接到 MySQL 服务器,而不是加载环境文件。你确定楼主是对的吗? 178...貌似是外网ip,数据库服务器不是在自己机器上吗? 我有一个拆分服务器服务器设置。一台机器用于 web/php,另一台机器仅用于 mysql。也许我忘了给分贝远程访问。让我检查一下…… 如果问题仍然存在,我建议替换数据库配置文件中的 getenv() 调用 - 不是永久的,只是为了确认服务器连接是否确实是问题。 我刚刚检查过,数据库设置正确。好的,我会试试的。 其实我想我可能已经想通了。 Laravel 4 默认命名环境生产,所以文件应该只是 .env.php,而不是 .env.production.php。至少值得一试。 :) 【参考方案1】:

在Laravel 4 docs 中声明它需要在您的生产服务器上为.env.php

现在,在您的生产服务器上,在您的项目中创建一个 .env.php 文件 包含您的生产的相应值的根 环境。与 .env.local.php 文件一样,生产 .env.php 文件不应包含在源代码管理中。

因此,只需将您的环境检测代码更改为此

$env = $app->detectEnvironment(function() 
    return file_exists(dirname(__FILE__) . '/../.env.php')
        ?
        'production'
        :
        'local';
);

注意 - 您仍然在开发服务器上使用 .env.local.php

【讨论】:

以上是关于Laravel 环境配置未加载,迁移失败 - SQLSTATE[HY000] [2002] No such file or directory的主要内容,如果未能解决你的问题,请参考以下文章

启动项目载入配置中心配置失败,未配置参数

Laravel迁移,hasColumn方法失败

Laravel 单元测试迁移失败

加载资源失败:服务器使用 laravel 8 / ajax 响应状态为 404(未找到)

Laravel 4 迁移错误?

迁移数据库(Laravel)时出错:表已存在