PHP Artisan 使用 MAMP 和 Unix Socket 进行迁移
PHP Artisan Migrate with MAMP and Unix Socket
我最初是在 Laravel 4.2 开发我的应用程序,但后来决定将其移至 5.0 版本,以便它涵盖 5.0 超过 4.2 的更多变化和优势。
我正在尝试 运行 我的迁移,但是我收到错误:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
我调查了这个并注意到它是怎么回事,因为我正在为我的服务器 运行ning MAMP 而不是 vagrant 和 homestead。我并没有否定这两者的用途,但在这一点上,我对 MAMP 感觉更舒服,直到它让我失望。我知道它的 MAMP 的原因是因为需要声明要使用的 unix 套接字值。
现在,在我的 4.2 版应用程序中,我有以下内容:
'mysql' => array(
'driver' => 'mysql',
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
'host' => getenv('DB_HOST'),
...
),
在我的 Laravel 5.0 版本中,我正在为我的环境变量使用 .env 文件,但不确定我需要怎么做才能知道使用 unix 套接字值。
有人可以告诉我应该如何将它应用到新版本中,或者更好的方法将它添加到设置中,这样我就不必这样做了吗?
试试这个:
'mysql' => array(
'driver' => 'mysql',
'unix_socket' => getenv('UNIX_SOCKET'),
'host' => getenv('DB_HOST'),
...
),
在 .env 中添加
UNIX_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
虽然很老的问题,但仍然可以帮助别人。所以添加答案。
甚至还有简单的解决方案。将此添加到您的 .env 文件
DB_HOST=localhost;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock
谢谢,帮我解决迁移问题:
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);
}
在 laravel 5.5 中 unix_socket 更改为 DB_SOCKET
在 .env 文件中:
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
里面 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', ''),
我创建了一个 Whosebug 帐户只是为了回答这个问题,也许可以帮助防止有人经历我经历过的痛苦。
我在网上找到的答案包括将 127.0.0.1 更改为本地主机,将端口从 3306 更改为 33060,反之亦然,以及确保 unix_socket 正确无误。
解决我问题的解决方案正在改变:
DB_CONNECTION=mysql
DB_HOST=localhost
至
DB_CONNECTION=mysql
DB_HOST=mysql
我希望这对外面的人有所帮助。我花了 4 个小时才找到这个非常明显的解决方案...并且发现 obscure YouTube video 1 分钟 29 秒,浏览量不到 1000。
我最初是在 Laravel 4.2 开发我的应用程序,但后来决定将其移至 5.0 版本,以便它涵盖 5.0 超过 4.2 的更多变化和优势。
我正在尝试 运行 我的迁移,但是我收到错误:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
我调查了这个并注意到它是怎么回事,因为我正在为我的服务器 运行ning MAMP 而不是 vagrant 和 homestead。我并没有否定这两者的用途,但在这一点上,我对 MAMP 感觉更舒服,直到它让我失望。我知道它的 MAMP 的原因是因为需要声明要使用的 unix 套接字值。
现在,在我的 4.2 版应用程序中,我有以下内容:
'mysql' => array(
'driver' => 'mysql',
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
'host' => getenv('DB_HOST'),
...
),
在我的 Laravel 5.0 版本中,我正在为我的环境变量使用 .env 文件,但不确定我需要怎么做才能知道使用 unix 套接字值。
有人可以告诉我应该如何将它应用到新版本中,或者更好的方法将它添加到设置中,这样我就不必这样做了吗?
试试这个:
'mysql' => array(
'driver' => 'mysql',
'unix_socket' => getenv('UNIX_SOCKET'),
'host' => getenv('DB_HOST'),
...
),
在 .env 中添加
UNIX_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
虽然很老的问题,但仍然可以帮助别人。所以添加答案。
甚至还有简单的解决方案。将此添加到您的 .env 文件
DB_HOST=localhost;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock
谢谢,帮我解决迁移问题:
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);
}
在 laravel 5.5 中 unix_socket 更改为 DB_SOCKET
在 .env 文件中:
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
里面 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', ''),
我创建了一个 Whosebug 帐户只是为了回答这个问题,也许可以帮助防止有人经历我经历过的痛苦。
我在网上找到的答案包括将 127.0.0.1 更改为本地主机,将端口从 3306 更改为 33060,反之亦然,以及确保 unix_socket 正确无误。
解决我问题的解决方案正在改变:
DB_CONNECTION=mysql
DB_HOST=localhost
至
DB_CONNECTION=mysql
DB_HOST=mysql
我希望这对外面的人有所帮助。我花了 4 个小时才找到这个非常明显的解决方案...并且发现 obscure YouTube video 1 分钟 29 秒,浏览量不到 1000。