【发布时间】:2020-08-29 17:03:10
【问题描述】:
我已经尝试了几个小时在我的 Laravel 项目和本地 MAMP 服务器之间建立数据库连接。
当我从我的 Mac 上的终端运行命令时,迁移工作。当我在我的 vagrant box 中运行它时,它不起作用。
iMac-van-Tim:myProject timcreemers$ php artisan migrate:status
+------+--------------------------------------------+-------+
| Ran? | Migration | Batch |
+------+--------------------------------------------+-------+
| Yes | 2014_10_12_000000_create_users_table | 1 |
| Yes | 2019_08_19_000000_create_failed_jobs_table | 1 |
+------+--------------------------------------------+-------+
但是当我运行我的应用程序时,我得到了这个错误:
Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from `users`)
当我在http://localhost:8888/ 上连接到我的 MAMP 服务器时,它会显示这些设置:
Host localhost
Port 8889
User root
Password root
Socket /Applications/MAMP/tmp/mysql/mysql.sock
我的 .env 文件:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=myproject
DB_USERNAME=root
DB_PASSWORD=root
我清空了我的 config/database.php 文件中的属性,因为该文件从 .env 中检索它们:
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', ''),
'port' => env('DB_PORT', ''),
'database' => env('DB_DATABASE', ''),
'username' => env('DB_USERNAME', ''),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
'schema' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
],
],
/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/
'migrations' => 'migrations',
/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
我尝试了许多解决方案,但似乎没有一个有效:
- 在 unix_socket 属性中添加 /Applications/MAMP/tmp/mysql/mysql.sock
- 在 localhost 和 127.0.0.1 之间切换 DB_HOST(两种方式都试过)
- 重新启动我的 MAMP 服务器
我检查了socket路径,发现了一个mysql.sock.lock文件,不知道有没有问题?
iMac-van-Tim:bin timcreemers$ cd /Applications/MAMP/tmp/mysql/
iMac-van-Tim:mysql timcreemers$ ls
mysql.pid mysql.sock mysql.sock.lock
根据我的阅读,它可能与套接字有关,但不幸的是我对此一无所知。谁能解释一下 vagrant box 应该如何与 MAMP 服务器一起工作?
此外,为数据库同时使用 Homestead 环境和 Mamp 服务器是否是一种好习惯?还是这让事情变得不必要地复杂化了?
我在这里有点绝望,谁能指出我正确的方向? 提前致谢!
【问题讨论】:
-
你在 Laracasts 上查看过这个 thread 吗?此外,首选使用 Homestead。
-
我也关注了这个帖子,但我一直收到同样的错误。我删除了 mamp 服务器,现在只使用宅基地。感谢您的帮助!
标签: laravel macos mamp homestead