PHP Artisan使用MAMP和Unix Socket进行迁移

时间:2015-03-27 16:24:24

标签: php laravel laravel-5 mamp-pro unix-socket

我最初在Laravel 4.2中开发我的应用程序,但后来决定将其移至5.0版本,以便它涵盖了5.0超过4.2的更多变化和优势。

我正在尝试运行我的migratiosn但是我收到了错误:

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

我调查了这个并注意到它是怎么回事,因为我为我的服务器而不是流浪汉和家园运行MAMP。我没有敲开那两个人的用途,但我在这一点上对MAMP感觉更舒服,直到它让我失望。我知道它的MAMP的原因是因为需要声明要使用的unix socket值。

现在,在我的应用程序的4.2版本中,我有以下内容:

'mysql' => array(
    'driver'    => 'mysql',
    'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
    'host'      => getenv('DB_HOST'),
    ...
),

使用我的Laravel 5.0版本,我正在使用.env文件作为我的环境变量,并且不确定我需要如何执行此操作以便它知道使用unix套接字值。

罐头有人告诉我如何将其应用到新版本或更好的方式将其添加到设置中以便我不必这样做?

5 个答案:

答案 0 :(得分:22)

试试这个:

'mysql' => array(
'driver'    => 'mysql',
'unix_socket'   => getenv('UNIX_SOCKET'),
'host'      => getenv('DB_HOST'),
...
),

在.env中添加

UNIX_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

答案 1 :(得分:5)

虽然很老的问题,但仍然可以帮助别人。所以添加答案。

甚至有简单的解决方案。将此添加到您的.env文件

DB_HOST=localhost;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock

答案 2 :(得分:1)

谢谢,帮助我使用以下方法解决迁移问题:

MAMP PRO 4.2
Laravel 5.5

在.env文件中:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=<database name>
DB_USERNAME=<username - default root>
DB_PASSWORD=<password - default root>
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

在config / database.php中:

'connections' => [

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', '<database name>'),
        'username' => env('DB_USERNAME', '<username - default root>'),
        'password' => env('DB_PASSWORD', '<password - default root>'),
        'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],
],

也不要忘记添加到app / Providers / AppServiceProviders.php:

use Illuminate\Support\Facades\Schema;
public function boot()
{
   Schema::defaultStringLength(191);
}

答案 3 :(得分:1)

在laravel 5.5中,unix_socket变为DB_SOCKET

在.env文件中:

<script type="text/javascript">
        function ScrollOnLoad(){
            window.scrollTo();
        }
</script>

 <body onload="ScrollOnLoad();">

在config / database.php中:

DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

答案 4 :(得分:0)

我创建了一个StackOverflow帐户仅仅是为了回答这个问题,也许可以帮助防止有人经历我所经历的痛苦。

我在网上找到的答案范围从127.0.0.1更改为localhost,端口从3306更改为33060,反之亦然,并确保unix_socket正确。

解决我的问题的解决方案正在改变:

DB_CONNECTION=mysql
DB_HOST=localhost

DB_CONNECTION=mysql
DB_HOST=mysql

我希望这可以帮助某个人。我花了4个小时才找到这个痛苦明显的解决方案……在1分钟29秒内,它被发现到obscure YouTube video中,观看次数不到1000。