Mysql Laravel家园流浪者箱数据库问题
在浏览器(example.app:8000)中浏览本地网站和使用php artisan migrate时,我不能使用相同的database.php设置 如果my database.php设置为:Mysql Laravel家园流浪者箱数据库问题,mysql,laravel,vagrant,Mysql,Laravel,Vagrant,在浏览器(example.app:8000)中浏览本地网站和使用php artisan migrate时,我不能使用相同的database.php设置 如果my database.php设置为: 'mysql' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'homestead', 'username' => 'homestead',
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'homestead',
'username' => 'homestead',
'password' => 'secret',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'port' => '33060'
)
Artisan可以工作,但我在浏览网站时发现:
SQLSTATE[HY000][2003]无法连接到“127.0.0.1”上的MySQL服务器
(111)(视图:/home/vagrant/Code/playnamics/app/views/hello.blade.php)
如果my database.php设置为:
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'homestead',
'username' => 'homestead',
'password' => 'secret',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'port' => '33060'
)
浏览网站正常,但artisan给出以下错误:
[PDOException]SQLSTATE[HY000]
[2002]没有这样的文件或目录
基本上,我需要在浏览时将主机设置为localhost,在使用artisan时将主机设置为127.0.0.1。如何简单地使用同一台主机,而不必每2分钟更改一次值?
真的很困惑。在我开始使用homestead&vagrant之前似乎更简单…:/ 这是我在Laracasts论坛上的回答,如果有帮助的话: 在虚拟机内部,sql端口是3306。在虚拟机之外,主机只有一个到虚拟机上SQL端口的转发。这就是33060点对3306点的原因 不幸的是,这就是为什么不能对这两个部分使用相同的数据库节的原因 我想到了两个想法:
只是想尝试一下。我只是让一个SSH会话对VM开放,并在那里运行命令,因为恢复机器后连接到它非常快。在homestead中,MySQL被配置为绑定到VM的10.x.x.x地址,而不绑定到127.0.0.1 您可以通过编辑
/etc/mysql/my.cnf
并添加以下行来更改:
bind address=0.0.0.0
这将允许您在数据库配置中使用127.0.0.1,用于数据库的web和CLI使用。您必须从VM内部执行迁移命令。首先,您登录到虚拟机:
ssh vagrant@127.0.0.1 -p 2222
之后,只需将cd放入项目文件夹并运行迁移
cd Code/blog
php artisan migrate
之所以会发生这种情况,是因为localhost:3306从您的机器的角度来看是一回事,从VM内部来看是另一回事。使用homestead ssh并粘贴ssh后vagrant@127.0.0.1-p 2222我们的php artisan migrate工作正常快速修复:
homestead ssh
)php artisan migrate
)我这样做的方式是在
homestad.yml
文件中设置变量。PhpDotenv不会填充存在的值,因此您可以在Homestead VM和config上设置环境变量
# homestead.yml
variables:
- key: APP_ENV
value: local
- key: DB_HOST
value: 127.0.0.1
- key: DB_PORT
value: 3306
# .env
DB_HOST=192.168.10.10 # Homestead VM IP
DB_PORT=33060 # Port which is forwarded to 3306 on the VM
--
vagrant@homestead:~/Sites/example$php artisan迁移
没有什么可以迁移的
--
Ben in~/Sites/example on develope$php artisan migrate
没有什么可以迁移的
这显然是假设Homestead上运行的所有站点都在使用MySQL(或3306上的一些数据库),并且所有数据库都在Homestead VM上,而不是在主机上,或在第三方(如AWS等)上
在撰写本文时,homestead不允许您配置每个站点的变量。Ben Swinburne的答案对我来说很有用 我在Homestead.yaml文件中添加了以下内容
variables:
- key: APP_ENV
value: local
- key: DB_HOST
value: 127.0.0.1
- key: DB_PORT
value: 3306
这将更新我们的代码用于从VM内连接到mysql的内容。因为它们是在VM中设置的,所以它们将优先于.env文件中的内容。我相信只有在服务器环境变量中不存在.env文件中的值时,才会设置这些值
然后在主机上运行的.env中,我拥有了从VM外部连接到mysql所需的内容
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=33060
DB_DATABASE=mydb
DB_USERNAME=homestead
DB_PASSWORD=mypassword
现在,我可以在VM外部和VM内部使用
artisan migrate
,而无需任何连接和端口问题。浏览网站也可以正常工作。SSH'ing进入虚拟机并运行artisan命令是def。第二个想法很好,我创建了一个开发环境,让我在我的主机上运行migrate如果您使用的是vagrant,那么只需执行vagrant ssh即可