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

use*_*216 8 php unix-socket laravel mamp-pro laravel-5

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

我试图运行我的migratiosn然而我收到错误:

[PDOException]
  SQLSTATE[HY000] [2002] No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

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

'mysql' => array(
    'driver'    => 'mysql',
    'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
    'host'      => getenv('DB_HOST'),
    ...
),
Run Code Online (Sandbox Code Playgroud)

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

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

小智 22

试试这个:

'mysql' => array(
'driver'    => 'mysql',
'unix_socket'   => getenv('UNIX_SOCKET'),
'host'      => getenv('DB_HOST'),
...
),
Run Code Online (Sandbox Code Playgroud)

在.env中添加

UNIX_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)


小智 6

在 laravel 5.5 中,unix_socket 更改为 DB_SOCKET

.env 文件内:

DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

在 config/database.php 里面:

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

DB_HOST=localhost;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)