Laravel 宅基地 php-7 "php5-fpm: unrecognized service" 在 vagrant up

Laravel Homestead php-7 "php5-fpm: unrecognized service" on vagrant up

尝试在每个项目安装中使用 php-7 版本的 Laravel Homestead 时,我在 vagrant up 期间看到此错误:

php5-fpm: unrecognized service

我已经尝试 vagrant destroy 并重新安装 Vagrant box,但它仍然返回此错误。

我在全局使用 Homestead 时没有收到错误。

如何解决这个问题?

问题在于,虽然 box: laravel/homestead-7Homestead.yaml 中设置正确,但 laravel/homestead 的作曲家依赖项仍在使用 php-5 版本。这意味着 vendor/laravel/homestead 中 Vagrant 的配置脚本是 php-5 而不是 php-7.

可以通过使用 laravel/homestead 的特定分支来修复作曲家依赖项。

composer.json 中,为 laravel/homestead 添加自定义存储库:

"repositories": [
    {
        "type": "git",
        "url": "https://github.com/laravel/homestead"
    }
]

并且需要 php-7 分支专门用于 laravel/homestead:

"require-dev": {
    "laravel/homestead": "dev-php-7"
}

然后 composer update 并重新配置 Vagrant box 将解决问题。

更新

laravel/homestead 现在默认有 PHP 7.0,旧的 php-7 分支不再存在。要解决此问题,您只需通过 composer.json.

更新至最新版本的 laravel/homestead

为了快速修复,我发现 this answer from laracasts 很有帮助:

cd ~/Homestead && git pull && vagrant destroy && vagrant box update && vagrant up

详细说明 "just destroy it and build again" 方法......我更喜欢这个,而不是从 PHP 5.6 到 PHP 7 的就地 Homestead 升级的各种说明在网络上漂浮 - 不会花很长时间,而且当你完成后一切都会感觉 "cleaner"。

(当然,如果您对 php.ini 或任何其他软件进行了更改,则需要再次执行这些操作。)

准备

  • 你的项目应该在主机上与 Vagrant box 共享的目录中,而不是在 Vagrant box 上,因为它即将被擦除
  • vagrant ssh 进入您的 VM 并将每个站点的数据库转储 mysql 转储到站点目录中,例如mysqldump -u root -p [dbname] > [dbname]-backup.sql(默认宅基地MySQL根密码为secret。)
  • 对所有内容进行备份(例如 Mac Time Machine and/or 做我做的事并将您的项目保存在 Dropbox 文件夹中)。当然,您的 git 存储库也安全地存储在某个地方?
  • Virtualbox 用户:导出整个盒子没有坏处,以防您卡住并想返回它(拍摄快照是不够的,因为当 VM 被销毁时,任何快照也会被擦除。)

进程

  • vagrant halt(如果您还没有)
  • vagrant destroy [VM id] 添加ID是为了防止破坏错误的盒子。使用 vagrant global-status 获取您的盒子列表;在第一列中使用 7 个字符的十六进制代码。
  • 在主机上的 ~/Homestead PC/Mac git pull origin master(如另一个答案中所述,现在没有单独的 PHP7 分支)
  • 可以 重新 运行 bash 脚本来创建一个干净的 Homestead.yaml 文件等 - bash init.sh,但是它复制的文件都是模板,所以你也可以不这样做并保留你以前的版本。
  • vagrant box add laravel/homestead(现在我们回到 standard installation instructions。在 VDSL 连接上这大约需要 10 分钟。
  • 在您的 Mac/PC.
  • 上编辑 ~/.homestead/Homestead.yaml

如果您对文档感到困惑,这里有一个文件夹映射示例:

folders:
    - map: ~/Dropbox/websites-homestead
      to: /home/vagrant/sites

sites:
    - map: site1.app
      to: /home/vagrant/sites/site1/public
    - map: site2.app
      to: /home/vagrant/sites/site2/public

databases:
    - site1
    - site2

所以...我的实际代码位于计算机上的 ~/Dropbox/websites-homestead/site1 和 /site2 中,并且我已将它们的公共父目录映射到 VM 上的 /home/vagrant/sites。 Homestead 将使用您列出的名称创建空数据库。

  • vagrant up(这将提供它)
  • vagrant ssh
  • cd sites(你应该能看到你的代码)
  • 使用 `mysql -u root -p site1 < site1-backup.sql
  • 恢复数据库
  • 如果您的计算机上有 /etc/hosts 个条目,您应该能够查看您的站点。如果无法连接到数据库,请检查.env 文件。

您现在应该可以执行此操作了:

$sudo service php7.0-fpm status
* php-fpm7.0 is running

$php -v
PHP 7.0.2-4+deb.sury.org~trusty+1 (cli) ( NTS )
[...]

打开 /etc/nginx/sites-available/your_site_conf 然后更改此行:

fastcgi_pass: /var/run/php5-fpm.sock;

至:

fastcgi_pass: /var/run/php/php7.0-fpm.sock;

然后重启nginx。

注意:这不是永久性解决方案,如果您运行提供命令,vagrant 将尝试自行设置并覆盖第一行。