Laravel Homestead Vagrant Box数据库问题

时间:2014-06-04 22:10:33

标签: mysql laravel vagrant

在浏览器中浏览本地网站(example.app:8000)和使用php artisan migrate时,我无法使用相同的database.php设置。

如果我的database.php设置为:

'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)

如果我的database.php设置为:

'mysql' => array(
   'driver'    => 'mysql',
   'host'      => 'localhost',
   'database'  => 'homestead',
   'username'  => 'homestead',
   'password'  => 'secret',
   'charset'   => 'utf8',
   'collation' => 'utf8_unicode_ci',
   'prefix'    => '',
   'port'      => '33060'
)

浏览网站有效但工匠提出此错误:

  

[PDOException] SQLSTATE [HY000]   [2002]没有这样的文件或目录

基本上,我需要在浏览时将主机设置为localhost,在使用artisan时需要127.0.0.1。我怎样才能简单地使用相同的主机,所以我不必每2分钟更改一次?

真的很困惑。在我开始使用宅基地之前看起来更简单流浪汉......:/

7 个答案:

答案 0 :(得分:9)

这是我在Laracasts论坛上回答的问题,如果有帮助的话:

在VM内部,sql端口为3306.在VM之外,主机只有一个转发到VM上的SQL端口。这就是为什么33060指向3306。

不幸的是,这就是为什么你不能为两者使用相同的数据库节。

我想到了两个想法:

  1. 在homestead.rb文件内的主机上也将sql端口从33060更改为3306。我知道如果您在端口10000下选择某些东西,机器会变得挑剔,因此您可能会收到提示输入管理员凭据(如果它甚至可以让您)。只要您没有在该端口上运行某些东西,它就“应该”起作用。

  2. 您可以考虑设置两个Laravel环境,用于在VM外部工作,一个用于内部。这样,您可以覆盖在VM上运行artisan命令或在主机上运行artisan时的database.php设置。实际上,您只关心更改端口号,因为所有其他设置都是相同的。你可以保留原样。

  3. 只是尝试一下。我只是将一个SSH会话打开到VM并在那里运行命令,因为在恢复机器后连接它很快。

答案 1 :(得分:3)

您必须从VM内部执行迁移命令。首先,您登录VM:

ssh vagrant@127.0.0.1 -p 2222

之后,您只需进入项目的文件夹并运行迁移

cd Code/blog
php artisan migrate

之所以发生这种情况,是因为localhost:3306从你机器的角度来看是一回事,从VM里面是另一回事。

答案 2 :(得分:3)

我这样做的方法是在homestead.yml文件中设置变量。如果值存在,PhpDotenv不会填充这些值,因此您可以在Homestead VM上设置环境变量并配置

# 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 migrate

     

无需迁移。

-

  

Ben in / / Sites / example on develop $ php artisan migrate

     

无需迁移。

这显然假设所有在Homestead上运行的站点都在使用MySQL(或3306上的某个数据库)并且所有数据库都在Homestead VM上,而不是在主机上,或者在第三方,​​比如AWS等。

在撰写本文时,宅基地不允许您配置每个站点变量。

答案 3 :(得分:2)

在宅基地,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使用数据库。

答案 4 :(得分:0)

使用宅基地ssh并粘贴你的ssh vagrant@127.0.0.1 -p 2222我们的php artisan迁移工作正常

答案 5 :(得分:0)

快速修复:

  1. ssh进入您的宅基地虚拟机(homestead ssh
  2. 导航到项目目录
  3. 从那里(php artisan migrate
  4. 运行您的命令

答案 6 :(得分:0)

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,而不会出现任何连接和端口问题。浏览网站也可以正常工作。